promise.resolve

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方法解析

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值