ES6中的Promise

由 月琳 发布
  | 1723 次浏览

Promise

在ES6中提供了 Promise 对象。

一、概念

  • 在MDN里的解释是(我的翻译可能不太好):Promise对象表示在异步操作下的最终完成(或失败)及其结果值。
The Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value.
  • 说成人话:Promise是一个对象,用来异步操作,在成功执行完毕或者中途失败的时候执行对应(完成或失败)的操作。

二、Promise有三个状态

  • pending(等待中):初始的状态,既没完成也没失败(也就是代码还在执行中)。
  • fulfilled(已完成):表示操作成功完成。
  • rejected(失败):表示操作执行失败。

三、特点、优缺点

  • 特点

    1. Promise的状态不会受到外部的影响。
    2. 改变状态后不会再发生改变。
  • 优点

    1. 避免了“回调地狱”
    2. 可读性好
  • 缺点

    1. 无法中途取消
    2. 如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。
    3. 当处于 Pending 状态时,无法得知目前执行到哪一个阶段(刚刚开始还是即将完成)。

四、基本使用

let promise = new Promise((resolve, reject) => {
  reject('参数')
}).then(data => { //成功
  console.log(data)
},err => {               //失败
    console.log('err',err)
}).catch(e => {        //捕获异常
  console.error(e);
})

resolve的作用:将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject的作用:将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

......


参考:

  1. MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
  2. https://www.jianshu.com/p/063f7e490e9a
  3. https://www.jianshu.com/p/1b63a13c2701

版权属于:月琳cc
本文链接:https://kerrinz.com/archives/29.html
作品采用《知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议》进行许可,转载请务必注明出处!

暂无评论

发表评论