阅读 117

Promise全攻略(二.Promise内部对任务的处理)

Promise是异步任务同步化的解决方案?本文讲通过以下几方面来介绍Promise:

  1. Promise的出现为了解决什么问题
  2. Promise内部对任务的处理
  3. Promise的标准规范
  4. Promise的方法使用
  5. Promise在eventLoop中执行顺序
  6. 源码地址

Promise知识分五个章节来阐述,这篇我们讨论:Promise内部对任务的处理
上文提到Promise的状态只能更改一次,可以解决信任问题。接下来我们讨论Promise中都有哪些状态以及状态和回调的关系。

三种状态

1.pending:初始化状态或在过程中还没有结果
2.resolved(又称Fulfilled):成功状态
3.rejected:失败状态
举例好说明:

new Promise((resolve,reject) =>{
    setTimeout(()=>{
        resolve('我的状态从pendding变成了resolved')
    },1000)
    reject('我的状态从pendding变成了rejected')  
}).then(response=>{
    console.log('我是成功的回调',response)  //我是成功的回调 我的状态从pendding变成了resolved
}).catch(err=>{
    console.log('我是失败的回调',err)  //我是失败的回调 我的状态从pendding变成了rejected
})
复制代码

当然这个例子不会走到成功的回调,因为在Promise中当pending状态变为rejected就不会再改变状态了,这也是为什么它可以解决信任问题的关键(无论成功与否都会给个答案)。概括一下:
当任务中调用了resolve函数 状态从pending => resolved 并触发.then回调,通过参数传递出resolve传值。
当任务中调用了reject函数 状态从pending => rejected 并触发.catch回调或.then回调,通过参数传递出reject传值。
一般Promise是对异步的封装,使其在内部统一执行完毕,给出一个指定的结果。这就是异步任务同步化的解决方案。
应用在实际当中,异步任务会有三个状态:
pending 等待网络请求或者定时器没有到时。
Fulfill 满足状态,请求成功有返回值,我们主动调用resolve后就处于该状态,回调then()。
rejected 拒绝状态,当请求超时或失败时,我们主动调用reject后就处于该状态,回调catch()。


如果此文章对您有帮助或启发,那便是我的荣幸

文章分类
前端
文章标签