码迷,mamicode.com
首页 > 其他好文 > 详细

带你探究promise

时间:2019-12-14 23:20:46      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:back   是你   img   ack   nbsp   new   技术   特点   第一个   

首先介绍一下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)

带你探究promise

标签:back   是你   img   ack   nbsp   new   技术   特点   第一个   

原文地址:https://www.cnblogs.com/yi-yezhiqiu/p/11562817.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!