我有两个函数开始异步加载资源。我怎样才能让他们回到承诺,我可以等待加载完成?如何为嵌套的异步调用创建承诺
// #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)
);
});
}
我想获得一个承诺(或两个),这样我可以等到双方完成后,即文件被加载和模板链接。我只是不明白我能如何获得它们以便它们能够被返回。简单地将return
放在每个函数的第一行之前将不会为嵌套任务返回正确的一个。我是否必须在这里改变我的设计才能够等待最内在的任务?
唉!你为什么使用'$ .when'而不是'Promise.all' –
我刚刚学习ES6,谢谢你的建议。 –
确实[此代码](https://jsfiddle.net/qombct3f/)解决您的问题?我不太确定你要诚实的承诺 –