2017-05-05 74 views
0

我有5個承諾,我希望按特定順序放置。但是我找到一種方法將它們按照正確的順序拼湊起來,這讓我感到很困難。 (1-2)-5-(3-4)而不是(1-2) - (3-4)-5或(3-4) - (1) -2)-5(也OK)。所以第五名來得太早了,它應該最後。我試圖將1 + 2 + 3 + 4放入數組/列表中,如下所示,然後創建第5個承諾,告訴它等待執行1-4。但是,正如所說的那樣,這個命令錯誤地出現了......任何想法?按特定順序運行承諾

this.promises.push(PROMISE1.then(() => { 

    **Code for PROMISE 1** 

    this.promises.push(PROMISE2.then(() => { 

         **Code for PROMISE 2** 

         }) 
    ); 
})); 

this.promises.push(PROMISE3.then(() => { 

    **Code for PROMISE 3** 

     this.promises.push(PROMISE4).then(() => { 

         **Code for PROMISE 4** 

         }) 
     ); 
    })); 

Promise.all(this.promises).then(() => { 

     **Code for PROMISE 5** 

    }); 
+0

這是因爲在Promise.all(this.promises)的執行時間,您的陣列只包含PROMISE1和PROMISE2,承諾3和4不會添加到this.promises中,並且不會影響所有行爲。 –

回答

0

而不是推入每個承諾的回調,返回內在的承諾。

var promises = []; 

promises.push(method1().then(() => { return method2().then(() => { } }); 
promises.push(method3().then(() => { return method4().then(() => { } }); 
Promise.all(promises).then(() => { ... }); 

這裏的工作示例:

function delay(time, name) { 
 
    console.log("running", name); 
 
    return new Promise(r => setTimeout(r, time)); 
 
} 
 

 
var promises = []; 
 

 
promises.push(delay(1000, "1").then(() => { 
 
    console.log("1 inner"); 
 
    return delay(500, "1 inner").then(() => console.log("1 inner most")); 
 
})); 
 

 
promises.push(delay(250, "2").then(() => { 
 
    console.log("2 inner"); 
 
    return delay(1000, "2 inner").then(() => console.log("2 inner most")); 
 
})); 
 

 
Promise.all(promises).then(() => console.log("all done!"));

+0

我沒有得到這個工作要麼... – MariusJ

+0

你能提供一個mcve嗎? –

+0

這是一個非常複雜的應用程序,所以我能做的最簡單的例子就是問題文章中的問題。如果有幫助,我有一個GitHub項目的鏈接? – MariusJ