2016-04-21 62 views
12

我想在下面的顺序来执行我的代码:如何将Promise.all与其他Promises链接起来?

  1. 承诺1
  2. 等待1做,然后做无极2 + 3的同时
  3. 最终函数等待无极2 +3要做

我有一些麻烦搞清楚,到目前为止我的代码如下。

function getPromise1() { 
    return new Promise((resolve, reject) => { 
    // do something async 
    resolve('myResult'); 
    }); 
} 

function getPromise2() { 
    return new Promise((resolve, reject) => { 
    // do something async 
    resolve('myResult'); 
    }); 
} 

function getPromise3() { 
    return new Promise((resolve, reject) => { 
    // do something async 
    resolve('myResult'); 
    }); 
} 

getPromise1() 
.then(
    Promise.all([getPromise2(), getPromise3()]) 
    .then() // ??? 
) 
.then(() => console.log('Finished!')); 
+1

正如adeneo解释的那样,无论你从一个处理程序返回的是否传递到下一个处理程序 –

回答

27

只是返回Promise.all(...

getPromise1().then(() => { 
    return Promise.all([getPromise2(), getPromise3()]); 
}).then((args) => console.log(args)); // result from 2 and 3 
+0

或使用'spread'如果你想以一种整洁的方式链接另一个承诺;) – Yerken

+3

@Yerken'spread'很棒,但isn '蓝鸟'扩展,而不是ES6? –

+1

对不起,你是对的。但希望有一天它会成为标准的一部分:) – Yerken

4

我知道这是一个古老的线程,但不是

() => {return Promise.all([getPromise2(), getPromise3()]);} 

有点多余?脂肪箭头的想法是,你可以把它写成:

() => Promise.all([getPromise2(), getPromise3()]) 

这使得生成的代码更为清楚:

getPromise1().then(() => Promise.all([getPromise2(), getPromise3()])) 
.then((args) => console.log(args)); // result from 2 and 3 

无论如何,感谢您的回答,我坚持了这个:)

相关问题