带你探究promise

首先介绍一下promise的特点:

1, Promise 的状态一旦发生改变就无法更改。

在编译器输入代码:

在控制台打印如下:

 

然后在编译器中再输入:

在控制台打印如下:

 

 可以看到状态和第一次一样还是success。同理如果第一次执行的是reject那么他的状态也不会变。

 总结:

 promise有三个状态:
1、pending[待定]初始状态;
2、fulfilled[实现]操作成功,resolve此时被操作;
3、rejected[被否决]操作失败;
当promise状态发生改变,就会触发then()里的响应函数处理后续步骤;
promise状态一经改变,不会再变。
Promise对象的状态改变,只有两种可能:
从pending变为fulfilled (resolve此时被操作)
从pending变为rejected (reject此时被操作)
这两种情况只要发生,状态就凝固了,不会再变了。

 

2, Promise 的then方法的参数期望是函数,传入非函数则会发生值穿透。

  .then期望传一个方法,但是你也可以不传一个方法,当有两个.then时,当你第一个不传方法时,它就像没发生一样,穿透到第二个.then上。同理如果第二个还不是一个方法的话会一直往下穿透。

 

3, Promise 的回调是同步的,而then的回调是异步的。

  

   

   可以看出阴影部分代码也就是promise部分是同步的,而then里面的代码是异步的最后打印。

4, 链式调用then,上一个then的返回值是下一个then接收到的参数,如果返回错误,会返回一个状态为reject的promise。

  

   

   可以看到第二个then的参数是第一个参数return后才能拿到的值。接着如果返回错误怎么办呢?请看下面代码:

  

   

   

5, then的回调里return一个promise会进入等待状态,直到return的promise改变。

  

   

   then会等待两秒后promise状态发生改变后才会执行里面的方法。

new Promise(( resolve, reject) =>{
console. log( 1)
resolve( 'succsee')
}). then(( res) =>{
console. log( 2)
})
console. log( 3)

猜你喜欢

转载自www.cnblogs.com/yi-yezhiqiu/p/11562817.html
今日推荐