等待 promises.all() 完成嵌套的 api 调用

wait for promises.all() to finish a nested api call

我必须根据结果一次又一次地使用 promises.all() 调用三个 API。

api1().toPromise().then(result=>{
 return result;
}).then(api1Result=>{
     api2(api1Result).toPromise().then(result2=>{
       // here I have to call three promises which return true or false
      let promises = []; 
      promises.push(addValue(result2));
      promises.push(moveItem(result2));

     Promise.all(promises).then(function(values) {
      console.log('done')
      return done;
     });
    }).then(promisesResult=>{
      console.log(promisesResult);
    });
 });

这里,console.log(promisesResult) 未定义,出现在 'done' 被 consoled

之前

我试过了

   Promises.all(promises).then(async function(values){
     await values
     return 'done'
    });

但是没有效果

如果您正在使用 async/await,您可以这样做:

const result1  = await api1().toPromise();
const result2  = await api2(result1).toPromise();  
const finalResults = await Promise.all([addValue(result2), moveItem(result2)]);
return finalResults;

否则,您必须将整个内容包装在一个 Promise 中,一旦 Promise.all 完成就解析:

return new Promise(resolve => {
  api1()
    .toPromise()
    .then(api1Result => {
      api2(api1Result)
        .toPromise()
        .then(result2 => Promise.all([addValue(result2), moveItem(result2)]))
        .then(finalResult => {
          console.log("done");
          resolve(finalResult);
        });
    });
});