2016-11-09 83 views
0

呼籲一個諾言和一個非諾言我有一個承諾,aPromise調用一個服務器,和一個非諾言,notAPromise這是所謂的同步,我需要打電話,然後做一些事情結果。我有這個,但不知道它是做Promise.all

Promise.all([aPromise(), Promise.method(notAPromise)()]) 
.spread(function(result1, result2) { 
    //do something with results 
}) 
.catch(function(error) { 
    //do something with error 
}); 

那麼,是否可以把同步notAPromise在Promise.all的最好的事情還是應該在外面?

這種方式的好處是,如果aPromise需要一段時間從服務器返回,notAPromise將在返回時完成。或者換句話說,我們不必等到同步notAPromise在調用服務器之前完成。

有沒有更好的方法我應該寫這段代碼?

編輯: 而不是返回一個結果,如果沒有顯示改變某種狀態,但我只希望新的狀態,如果aPromise成功返回也可能有問題。如果aPromise拋出但沒有完成,我們將會進入新的狀態嗎?

+0

Promise可以異步執行,所以你不需要在promise.all中插入非promise函數 –

回答

3

你的代碼是絕對好的(甚至可以處理notAPromise會拋出的情況)。然而,通常一個人會簡單地寫

aPromise().then(function(result1) { 
    var result2 = notAPromise(); 
    //do something with results 
}).… 

當我們不關心什麼順序或什麼時候調用這兩個函數。預計同步notAPromise需要一段不顯着的執行時間,如果它很重要(並且應該能夠與其他事件並行運行),它應該是異步的。