2016-04-21 14 views
12
Ben şu sırayla benim kod icra edilmesini isteyen

:Diğer Promises'lerle Promise.all nasıl zincirlenir?

  1. Promise 1
  2. 1 yapılması gereken bekleyin, daha sonra
  3. Final fonksiyon Promise 2 bekler aynı anda Promise 2 + 3 yapmak +3,

Bunu bulmakta zorluk çekiyorum, kodum şu ana kadar aşağıda.

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'nun açıkladığı gibi, bir işleyiciden geri döndüğünüzde, bir sonraki işleyiciye –

cevap

27

Tıpkı eski bir iplik olduğunu biliyorum Promise.all(...

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

aktarılır veya başka bir sözün düzgün bir şekilde zincirlenmesi için "spread" işlevini kullanın;) – Yerken

+3

@Yerken 'spread' is great, ancak isn Bu bir 'Bluebird' uzantısı değil, ES6 değil mi? –

+1

yemen üzgünüm, haklısın. Ama umarım bir gün standardın parçası olur :) – Yerken

4

dönmek fakat

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

biraz gereksiz değil mi? Ortaya çıkan kodu biraz daha net hale getirir

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

: Yağ okun fikri olarak bunu yazabilmesidir Neyse

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

, yanıt için teşekkürler, ben bu ile sıkışmış edildi :)

İlgili konular