我必须根据结果一次通过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'
});
但没有效果
答案 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);
});
});
});