Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建promise函数的更好版本_Javascript_Asynchronous - Fatal编程技术网

Javascript 创建promise函数的更好版本

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

我有点难以理解承诺,当我执行X异步操作时,我有一个用例,当这些操作完成时,我调用RESTAPI。下面是我的代码:

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,你是对的。我想我改变了变量…:|