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

时间:2019-06-07 15:54:13

标签: typescript angular5

我必须根据结果一次通过promises.all()一次调用三个APIS。

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)是未定义的,并且在控制台“完成”之前出现

我尝试过

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

但没有效果

1 个答案:

答案 0 :(得分:0)

如果您使用的是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);
        });
    });
});