在Metro风格应用程序中启动时加载数据

时间:2012-08-08 15:36:43

标签: javascript html5 microsoft-metro

我正在尝试开发一个使用相机的应用程序,并将照片存储在用javascript和html5编写的应用程序的本地文件夹中。我有3个页面使用相同的文件(图像),在每个页面的准备部分加载图像太昂贵,所以我想在应用程序启动时使用getFilesAsync()方法将图像加载到数组或列表使用WinJS.Namespace.define将其公开。该解决方案适用于少量数据但是当很多图片存储在images文件夹中时,异步操作需要更多时间,所以当我尝试访问另一个页面上的文件时,它仍然是未定义的。

您是否知道如何在启动应用程序时加载数据并使其可以从其他页面访问并强制程序等到它完成?我知道这与异步编程完全相反,但我没有看到任何其他解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

您需要使用承诺和承诺链让您等待完成:

var getFiles = Windows.Storage.StorageFolder.getStorageFilderSync("Your folder").then(function(folder) {
    return folder.getFilesAsync();
});

/* somewhere else in your app */
getFile.done(doWorkWithResult);

您可以从其他页面调用完成;如果getFilesAsync已经完成,那么它将立即返回并且不会重新运行查询。如果它没有准备好,那么它将等到它完成。

有一个很好的样本here,它有一些更有用的例子。