Promise

105 阅读2分钟

对于Promise,我更多地理解为一种异步编程的方式,通过状态的转换来完成异步编程。

一个构造函数

注册一个Promise对象,通常以下面形式创建构造函数

const p = new Promise((resolve,reject) => {
    if(条件成立) {
        resolve()
    }

    if(条件失败) {
        reject()
    }
})

构造函数中存在一个函数参数,函数中存在两个参数,分别是resovle、reject。通过resolve可以将promise状态更改为fulfilled,通过reject可以将promise状态更改为rejected,关于状态,可以从下面得知相关信息。个人理解认为,resovle通常是返回成功之后的结果,reject返回失败之后的结果。

两个实例方法

将Promise对象实例化,有两种实例方法,分别是 .then()、.catch() 。then()接收Promise中resolve返回的内容,catch()接收Promise中reject返回的内容。

p.then( res => {
 console.log(res)
})
.catch( err => {
 console.log(err) 
}) 

三种状态

Promise对象有三种状态,分别是pending、fulfilled、rejected,代表待定、已执行、已拒绝。fulfilled和fulfilled可以归结为已完成的状态。

优势

链式编程方式

Promise异步函数编程的方式,将程序员从多重函数回调的繁琐编程中解脱,以简单明了的编程方式,完成多重异步函数。

promise.then(异步函数)
       .then(异步函数)
       .then(异步函数)

这样的方式,可以理解为只有第一个异步函数执行成功,然后在下一个then方法中接收上一步函数返回结果作为参数,进而继续执行下一步函数。通过链式编程,简单明了,不容易出错,这也是,我个人理解的异步编程方式。

异步任务并行

如果我们需要多个异步函数同时执行,通过Promise方式大大简化代码

Promise.all([
    getData1(),
    getData2(),
    getData3()
]).then( datas => {
    // 数据处理
})

通过Promise同时执行三个获取数据的方式,然后可以在datas获取它们执行的结果,然后进行相应的数据处理。