我正在學習Promise,爲了理解它,我閱讀了一些關於JavaScript的Event循環的內容。這個article簡要介紹了事件循環的工作,如調用堆棧,事件表和消息隊列。瞭解已解決承諾的後續then()處理程序的執行順序
但我不知道調用堆棧如何處理包含'return'的行,以及之後會發生什麼。 下面是我寫的一個例子,希望瞭解Promise如何基於事件循環工作。如果您想放棄它,請參閱http://jsbin.com/puqogulani/edit?js,console。
var p1 = new Promise(
function(resolve, reject){
resolve(0);
});
p1.then(function(val){
console.log(val);
p1.then(function(){
console.log("1.1.1");
p1.then(function(){
console.log("1.1.2");
p1.then(function(){
console.log("1.1.3");
});
});
});
p1.then(function(){
console.log("1.2");
})
return 30;
//return new Promise(function(resolve, reject){
// resolve(30);
//});
})
.then(function(val){
console.log(val/2);
});
p1.then(function(){
console.log("2.1");
});
console.log("Start");
可以看出,有兩個「迴歸」,利用他們每個人都會給出不同的輸出順序。具體來說,當使用return 30;
,1.1.2, 1.1.3
後是15
,但是當使用return new Promise(...)
時,1.1.2, 1.1.3
在15
之前。那麼當代碼達到兩個不同的'返回'時到底發生了什麼?
刪除的1.1.4和1.1的回調。5 - 他們沒有被引用,並使其不易理解,每個人都已經達到了1.1.2。沒有他們,每個人仍然能夠理解困境。 –
@ try-catch-finally,感謝您的建議和編輯。我只是想更清楚一點,雖然有時它會讓事情變得相反:) –
So @ try-catch-finally,我想知道你能否就我的問題提出建議?謝謝 –