Javascript 创建promise函数的更好版本
我有点难以理解承诺,当我执行X异步操作时,我有一个用例,当这些操作完成时,我调用RESTAPI。下面是我的代码:Javascript 创建promise函数的更好版本,javascript,asynchronous,Javascript,Asynchronous,我有点难以理解承诺,当我执行X异步操作时,我有一个用例,当这些操作完成时,我调用RESTAPI。下面是我的代码: const promises = defect.images.map(async image => { return new Promise((resolve)=> { this.fileProvider.getDefectImage(image.url) .then(binary => { i
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端获取数据,它在那里也是空的。在任何承诺得到解决之前,您正在记录
图像,所以在那一点上它仍然是空的
你需要等待所有的承诺首先得到解决。显然你已经知道怎么做了:
return Promise.all(promises)
.then(() => {
console.log(images);
spinner.dismiss();
})
此外,您正在混合async
/await
语法和Promise
语法。如果您要依赖async
/wait
,那么您最好一直这样做,然后您的代码将再次从上到下执行:
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();
console.log
在Promise.all返回的承诺解决后。像这样:。然后(()=>{console.log(images);return spinner.disease();})
当这个.fileProvider.getDefectImage()
已经返回了一个Promise?^^^^而且既然它已经返回了,就没有理由让映射回调异步。您已经有了承诺,无需使用语法为您创建承诺。FWIW:(请参阅注释),如果您明确使用承诺(而不是async
函数)。如果使用async
函数:@Paulpro,你是对的。我想我改变了变量…:|