我正在学习Promise,为了理解它我读了一些关于JavaScript的事件循环.此文章简要介绍了事件循环的工作,如调用堆栈,事件表和消息队列.
但我不知道调用堆栈如何处理包含'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
.那么当代码达到两个不同的"返回"时究竟发生了什么?