我有兩個函數開始異步加載資源。我怎樣才能讓他們回到承諾,我可以等待加載完成?如何爲嵌套的異步調用創建承諾
// #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/)解決您的問題?我不太確定你要誠實的承諾 –