创建更好的Promise功能版本

时间:2018-11-06 16:09:16

标签: javascript asynchronous

我有点难以理解诺言,我执行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端获取数据,该位置也为空。

1 个答案:

答案 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();