Open AwakenedSomeone opened 3 years ago
先看一个例子,猜猜会打印出啥:
var p3 = new Promise( function(resolve,reject){ resolve( "B" ); } ); var p1 = new Promise( function(resolve,reject){ resolve( p3 ); } ); p1.then( function(v){ console.log( v ); } )
结果打印出来的是“B”,第一次看到这样的写法,我以为p1的then中传的参数v应该是p3,因为p1在定义的时候就是将p3传给resolve的,实际上并不是表面上的那么简单,resolve不仅将参数传给了then方法中的回调函数,还在接收到参数之后做了处理,它会去判断resolve接收的参数是不是一个promise,或者是具有thenale(有和promise类似表现)的对象,则会去展开这个promise,即等待传入的promise的结果,然后将这个结果传给then里的回调函数。如果传入的promise有嵌套,则会取最终决议值或者状态。
再看补充的完整的例子:
var p3 = new Promise( function(resolve,reject){ resolve( "B" ); } ); var p1 = new Promise( function(resolve,reject){ resolve( p3 ); } ); p2 = new Promise( function(resolve,reject){ resolve( "A" ); } ); p1.then( function(v){ console.log( v ); } ) p2.then( function(v){ console.log( v ); } );
打印出来的结果 是先A后B,原因是,p1的resolve在展开p3的时候会是一个异步过程,所以p2的then先执行。
先看一个例子,猜猜会打印出啥:
结果打印出来的是“B”,第一次看到这样的写法,我以为p1的then中传的参数v应该是p3,因为p1在定义的时候就是将p3传给resolve的,实际上并不是表面上的那么简单,resolve不仅将参数传给了then方法中的回调函数,还在接收到参数之后做了处理,它会去判断resolve接收的参数是不是一个promise,或者是具有thenale(有和promise类似表现)的对象,则会去展开这个promise,即等待传入的promise的结果,然后将这个结果传给then里的回调函数。如果传入的promise有嵌套,则会取最终决议值或者状态。
再看补充的完整的例子:
打印出来的结果 是先A后B,原因是,p1的resolve在展开p3的时候会是一个异步过程,所以p2的then先执行。