Promise中的同步执行顺序

时间:2015-11-10 05:01:31

标签: javascript 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>

为什么第二个侦听器比第一个侦听器更早完成?

2 个答案:

答案 0 :(得分:1)

第二个侦听器不依赖于第一个侦听器(promise),因此它们异步工作。你为什么把它们分开?您只需使用以下代码

即可
    Promise
        .resolve()
        .then(function(){
            throw 'first';
        })
        .catch(function(er){
            console.log(er);
        })
        .finally(function(er) {
            console.log('second');
        };
    });

答案 1 :(得分:1)

按照标准要求表现如下:

  
      
  1. 否则,如果承诺[[PromiseState]]内部广告位的值为"fulfilled",则为   一个。设value为promise [[PromiseResult]]内部插槽的值   湾执行EnqueueJob("PromiseJobs", PromiseReactionJob, «‍fulfillReaction, value»)
  2.   
  3. 否则,如果承诺[[PromiseState]]内部广告位的值为"rejected",则为   一个。让理性成为承诺[[PromiseResult]]内部插槽的价值   湾执行EnqueueJob("PromiseJobs", PromiseReactionJob, «‍rejectReaction, reason»)
  4.   

因此,当一个promise被解决或被拒绝时,相应的回调被安排在稍后运行,与当前执行异步。

参考文献: