console.log("test")
let p1 = Promise.resolve(Promise.resolve("thenanlbe"));
p1.then(function(value) {
console.log(value);
})
Promise.resolve(232).then(()=>{
console.log("3")
}).then(()=>{
console.log("4")
}).then(()=>{
console.log("5")
})
输出结果:
test,thenanlbe,3,4,5
console.log("test")
let thenable = {
then: function(resolve, reject) {
console.log("thenanlbe")
resolve(42);
}
};
let p1 = Promise.resolve(thenable);
p1.then(function(value) {
console.log(value); // 42
})
Promise.resolve(232).then(()=>{
console.log("3")
}).then(()=>{
console.log("4")
}).then(()=>{
console.log("5")
})
输出结果 :test,thenanlbe,3,42,4,5
两者之所以有区别,是因为primise.resolve的参数,一个是promise,一个是thenable对象,
如果是promise,直接返回,如果是thenable对象,promise.resolve返回的promise对象,会跟随then方法里的值,如果有多层then方法,会全部展开,采用最终状态
var p3 = new Promise( function(resolve,reject){
resolve( "B" );
} );
var p1 = new Promise( function(resolve,reject){
resolve( p3 );
} );
var p2 = new Promise( function(resolve,reject){
resolve( "A" );
} );
p1.then( function(v){
console.log( v );
} );
p2.then( function(v){
console.log( v );
} );
如果把p1 换成 var p1 = Promise.resolve(p3)
那么输出结果的顺序会有不同
结论就是,如果是执行器里面的resolve方法,如果参数是promise,也要执行到该promise的then 方法,而promise.resolve的话,如果是promise,直接返回,如果不是的话,是thenable对象,才会执行then
var p5 = new Promise(( resolve )=>{
resolve("p1")
}).then(()=>{
console.log("p5")
})
var p4 = new Promise(( resolve )=>{
resolve(p5)
}).then(()=>{
console.log("p3")
})
var p3 = new Promise( function(resolve,reject){
resolve( p4 );
} ).then(()=>{
console.log("p2")
})
var p1 = new Promise( function(resolve,reject){
console.log("p1")
resolve( p3 );
} ).then(( val )=>{
console.log(val)
})
var p2 = new Promise( function(resolve,reject){
resolve( "1" );
} );
p2.then( function(v){
console.log( v );
}).then(()=>{
console.log("2")
}).then(()=>{
console.log("3")
})
只要执行器里面的参数是含有then方法,,一定会执行到把该then方法解析