【发布时间】:2017-12-24 02:29:57
【问题描述】:
我有两个函数正在开始异步加载资源。我怎样才能让他们返回我可以等到加载完成的承诺?
// #1
LoadMaps() {
gFileService.getFile('syn-maps.json').then(
mapItem => this.synMaps = mapItem
).then(
gFileService.getFile('sense-maps.json').then(
mapItem => this.senseMaps = mapItem
)
);
}
// #2
LoadListAndMetadata() {
gListService.getList().then(lexList => {
let promises = [];
lexList.forEach(lexItem => {
lexItem.selected = false;
this.lexList[lexItem.lexId] = lexItem;
if (lexItem.hasMeta) {
promises.push(gFileService.getFile(lexItem.metaFile).then(
metaItem => this.metadata[lexItem.lexId] = metaItem
));
}
});
$.when(...promises).then(
() => $.templates('#lexSelectionTemplate').link('#lexSelection', this)
);
});
}
我想获得一个(或两个)Promise,这样我就可以等到两者都完成,即加载文件并链接模板。我只是不知道如何获得它们以便可以将它们退回。简单地将return 放在每个函数的第一行前面不会为嵌套任务返回正确的函数。我是否必须在这里更改我的设计才能等待最里面的任务?
【问题讨论】:
-
啊!你为什么用
$.when而不是Promise.all -
我刚学ES6,谢谢你的建议。
-
this code 能解决您的问题吗?我不太确定你想要诚实的承诺
-
@JaromandaX 是的!非常感谢!
标签: javascript asynchronous ecmascript-6 promise es6-promise