我有点难以理解诺言,我执行X异步操作时有一个用例,当这些操作完成时,我会调用rest api。在我的代码下面:
const promises = defect.images.map(async image => {
return new Promise((resolve)=> {
this.fileProvider.getDefectImage(image.url)
.then(binary => {
images.set(image.url, binary);
resolve();
});
})
});
console.log(images)
return Promise.all(promises)
.then(() => spinner.dismiss())
但是图像的console.log始终为空...我应该更改什么?
//编辑 对不起,导致您陷入陷阱,确实这个console.log无法正常工作,但我无法在bakcend端获取数据,该位置也为空。
答案 0 :(得分:0)
您正在登录images
,但尚未兑现任何承诺,因此在那时它仍然是空的。
您需要等待所有诺言首先得到解决。而且显然您已经知道该怎么做:
return Promise.all(promises)
.then(() => {
console.log(images);
spinner.dismiss();
})
此外,您正在混合使用async
/ await
语法和Promise
语法。如果您要依靠async
/ await
,最好还是走一路,然后您的代码将再次从上到下执行:
const promises = defect.images.map(async image => {
let binary = await this.fileProvider.getDefectImage(image.url);
images.set(image.url, binary);
});
await Promise.all(promises);
console.log(images);
spinner.dismiss();