我有一个从服务器下载为json文件的产品列表。每个项目都包含指向存储在服务器上的图像的链接。
现在我希望能够在离线时看到产品,因此我将下载的json文件存储到forge.prefs http://docs.trigger.io/en/v1.3/modules/prefs.html并将其拉出以在屏幕上显示项目。它工作得很好,但我还需要存储图像,以便正确显示。
要实现这一点,我正在尝试使用forge.file.cacheURL http://docs.trigger.io/en/v1.3/features/cache.html,但无法处理正确的操作顺序。要缓存图像,我运行json文件,对于每行,我调用forge.file.cacheURL并将url存储回JSON项。但问题是forge.file.cacheURL异步运行所以我的循环遍历项目并收集本地图像完成,我的代码继续显示图像(查看项目)但同时forge.file.cacheURL仍然收集并缓存图像因为它的异步操作。我需要以某种方式检测最后一个项目是否被缓存,然后刷新屏幕上的视图以使用正确的图像URL ...或其他会导致我需要的东西。
希望你理解这个概念。我应该如何妥善处理?
答案 0 :(得分:0)
从v1.4.26开始,你已经能够永久存储图像(参见http://docs.trigger.io/en/v1.4/release-notes.html#v1-4-26),而不仅仅是缓存它们。根据您的需求,这可能是比forge.file.cacheURL
和forge.file.isFile
更好的选择。
我并不完全按照你描述的情况,但这样的事情会让你等待几件异步事情完成之后才能完成:
// e.g.
var jsonCache = {
one: "http://example.com/one.jpg",
two: "http://example.com/two.jpg",
three: "http://example.com/three.jpg"
};
var cacheCount = 0;
for (var name in jsonCache) {
if (jsonCache.hasOwnProperty(name)) {
var imageURL = jsonCache[name];
cacheCount += 1;
forge.file.cacheURL(imageURL, function (file) {
forge.prefs.set(name, file, function () {
cacheCount -= 1; // race condition, but should be fine (!)
if (cacheCount <= 0) {
alert('all cached');
}
});
});
}
}