Promise 对象(笔记)

1.Promise 实例

定义一个Promise实例,接收一个函数,函数中的两个参数分别是resolve和reject。resolve是异步操作成功之后调用,reject是失败之后调用。

const promise = new Promise(function(resolve, reject) {
  
});

注意:Promise 创建后就会立即执行,状态变为失败或者成功之后就不会再改变了。

2.Promise.prototype.then()

Promise实例生成以后,会有一个then方法。(这个then方法是定义在原型对象Promise.prototype上的)。then方法的第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数。

promise.then(function(value) {
  // success
}, function(error) {
  // failure
});

then方法可以链式调用:前一个回调函数,有可能返回的还是一个Promise对象(即有异步操作),这时后一个回调函数,就会等待该Promise对象的状态发生变化,才会被调用。

const p = function(greeting) {
        return new Promise((resolve) => {
            setTimeout(() => {
                resolve(greeting)
            }, 1000)
        })
}

p("hello").then(value => {
       console.log(value); //1s之后弹出hello
       return p("world");
 }).then(value => {
      console.log(value); //再过1s弹出world
})

注意,如果某一个then执行后状态变为rejected,就不会继续执行then方法,而是执行rejected回调函数。

3.Promise.prototype.catch()

如果不想使用then的第二个参数去处理错误,可以使用catch。

p.then(value => {
     // success
}).catch(error => {
     // failure
});

4.Promise.prototype.finally()

finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。(ES2018 引入标准的)

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

5.Promise.all()

Promise.all方法把多个实例包装成一个新的 Promise 实例,当几个实例都是成功状态,则新实例p就是成功状态。如果某一个是失败状态,则新实例就是失败状态。

const p = Promise.all([p1, p2, p3]);

注意:如果某个参数不是promise实例,则会把它自动转换为promise实例。

6.Promise.race()

Promise.race()也是把多个实例包装成一个新的实例,当其中某一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。

const p = Promise.race([p1, p2, p3]);

注意:如果某个参数不是promise实例,也会把它自动转换为promise实例。

7.Promise.resolve()

将现有的对象转换为Promise 对象,并且状态为resolved。

Promise.resolve('foo')
// 等价于
new Promise(resolve => resolve('foo'))

注意: 参数是一个promise实例,会直接返回这个实例。

8.Promise.reject()

返回一个rejected状态的Promise 对象。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 12,774评论 1 56
  • 一、Promise的含义 Promise在JavaScript语言中早有实现,ES6将其写进了语言标准,统一了用法...
    Alex灌汤猫阅读 4,237评论 0 2
  • 前言 本文旨在简单讲解一下javascript中的Promise对象的概念,特性与简单的使用方法。并在文末会附上一...
    _暮雨清秋_阅读 6,616评论 0 3
  • 1. Promise 的含义 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个...
    ROBIN2015阅读 3,452评论 0 0
  • 喜欢夜晚 灯下 思考着生活点点 笔下 记录了悲欢离合 喜欢夜晚 一杯清茶 品出淡香悠远的岁月 一杯烈酒 饮出豪情万...
    心安何所归阅读 3,966评论 8 26