【发布时间】:2017-02-22 00:38:04
【问题描述】:
我是 Promises 的新手,并尝试先从本地存储加载大量结果,如果失败,则转而从服务器获取数据。我不想使用 jquery - 忽略我目前正在使用 $.getJSON :-/
function loader1() {
return new Promise(function (resolve, reject) {
localforage.getItem("data1").then(function (value) {
if (value !== null) {
resolve(value);
} else {
$.getJSON("/myapp/data1.json").then(function (data) {
if (data !== null) {
resolve(data);
}
}).catch(function (err) {
reject(err);
});
}
});
});
}
这对于一个文件来说很好。那么我会
loader1().then(function(result) {
// we have a result
doSomethingElse();
}).catch(function (err) {
// problem
});
但我想对多个文件执行此操作,其中一些文件位于本地存储中,其中一些文件从远程源加载 json。我想加载所有内容,完成后,执行我的应用程序的下一步。
Promise.all 似乎是问题,但我看不到如何获取每个加载器的结果;我在想它会是这样的:
Promise
.all([loader1, loader2, loader3])
.then(function(result1,result2,result3)) {
...
但这不是它的工作原理......所以我尝试了
Promise
.all([loader1, loader2, loader3])
.then(function(result)) {
// var result1 = result[0];
// var result2 = result[1];
// var result3 = result[1];
但第二个的结果是函数而不是返回值...
搜索许多网站表明,像 Q 和 bluebird 这样的承诺系统有一个 spread 方法,看起来像我想要的。我可以在普通的旧 javascript 中执行此操作(如何?)还是应该考虑使用 Q 或 RSVP 之类的库来代替?
【问题讨论】: