簡體   English   中英

Promise中同步執行的順序

[英]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');
        };
    });

按照標准要求,其行為類似於:

  1. 否則,如果promise的[[PromiseState]]內部廣告位的值"fulfilled"
    一種。 令value為promise的[[PromiseResult]]內部廣告位的值。
    b。 執行EnqueueJob("PromiseJobs", PromiseReactionJob, «‍fulfillReaction, value»)
  2. 否則,如果promise的[[PromiseState]]內部廣告位的值被"rejected"
    一種。 假設reason為promise的[[PromiseResult]]內部廣告位的值。
    b。 執行EnqueueJob("PromiseJobs", PromiseReactionJob, «‍rejectReaction, reason»)

因此,當一個承諾被解決或被拒絕時,相應的回調被安排在以后與當前執行異步地運行。

參考文獻:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM