等待 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);
});
});
});
我必须根据结果一次又一次地使用 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);
});
});
});