2016-04-29 22 views
6

2.2.4條說:Promise/A +規範第2.2.4條背後的意圖是什麼?諾/ A +規格的

onFulfilled或onRejected不能調用,直到執行 上下文堆棧只包含平臺的代碼。

然後在說明它指出:

這裏「平臺代碼」是指引擎,環境,並承諾 實現代碼。在實踐中,這個要求確保了onFulfilled和onRejected異步執行,在事件 循環調用之後被調用,並且具有新的堆棧。

這樣做的目的是爲了確保鏈中存在大量onFulfilled函數時,它們的執行不會導致線程阻塞?

或者還有什麼是我不閱讀的行之間?

+0

另請參閱[這裏](https://stackoverflow.com/a/28750658/1048572),[這裏](https://stackoverflow.com/a/29454966/1048572),在[那些](https://stackoverflow.com/q/23447876/1048572)[threads](https://stackoverflow.com/q/29963129/1048572) – Bergi

回答

8

的理由是,當回調是總是異步,而不是可能異步的,它提供了更多的一致和可靠的API使用。請看下面的代碼

var pizza; 
browseStackOverflow().then(function(){ 
    eatPizza(pizza); 
}); 
pizza = yesterdaysLeftovers; 

現在片段清楚地假設onFulfilled不會馬上打來電話,如果不是這樣,我們很快就會有未使用的比薩餅躺在身邊,我們很捱餓。雖然在這種情況下,錯誤很容易修復,但執行的順序更容易遵循,因此,當您可以做出這樣的假設時,api更易於使用。

有一個封閉的issue on the Promises/A+ GitHub回購與此討論。

相關問題