[英]Order of synchronous execution in Promise
嘗試在事件偵聽器中測試Promise時遇到問題。 除了執行順序,一切都很好。
var test = document.querySelector('#test'); test.addEventListener('click',function(){ Promise.resolve().then(function(){ throw 'first'; }).catch(function(er){ console.log(er); }); }); test.addEventListener('click',function(){ console.log('second'); }); test.click();
<div id="test"></div>
為什么第二個收聽者比第一個收聽者更早完成?
第二個偵聽器不依賴第一個偵聽器(承諾),因此它們異步工作。 你為什么要分開? 您可以簡單地使用以下代碼
Promise
.resolve()
.then(function(){
throw 'first';
})
.catch(function(er){
console.log(er);
})
.finally(function(er) {
console.log('second');
};
});
按照標准要求,其行為類似於:
- 否則,如果promise的
[[PromiseState]]
內部廣告位的值"fulfilled"
,
一種。 令value為promise的[[PromiseResult]]
內部廣告位的值。
b。 執行EnqueueJob("PromiseJobs", PromiseReactionJob, «fulfillReaction, value»)
。- 否則,如果promise的
[[PromiseState]]
內部廣告位的值被"rejected"
,
一種。 假設reason為promise的[[PromiseResult]]
內部廣告位的值。
b。 執行EnqueueJob("PromiseJobs", PromiseReactionJob, «rejectReaction, reason»)
。
因此,當一個承諾被解決或被拒絕時,相應的回調被安排在以后與當前執行異步地運行。
參考文獻:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.