ECMAScript - Promise 笔记

Promise

Promise用于封装和处理异步操作。
相关的资料网上一大堆,所以只记录一些细节。

创建Promise实例

const promise = new Promise((resolve, reject) => {
    fs.readFile("./test", (err, data) => {
        if(err) {
            reject(err)
            return 
        }
        resolve(data.toString())
    })
})

注意:Promise对象创建即运行,所以将这个过程封装在函数中,随函数调用触发。

Promise三个状态

pending:待定状态
fulfiled:执行resolve()后的状态
rejected: 执行reject()后的状态

then()方法

参数:
then(onResolve, onReject)

then()方法确实会继续返回一个Promise对象,但是如果then()传入的回调函数并不返回一个Promise对象,
那链式调用then()也没什么意义。
比如这里要进行一个顺序读取文件的操作:

// 这里我们让每个then再次返回一个Promise对象
readFile("1")
.then((res) => {
    console.log(res)
    return readFile("2")
})
.then((res) => {
    console.log(res)
    return readFile("3")
})
.then((res) => {
    console.log(res)
})

// 错误的写法,这样之后的then就不是异步的,必须让then的回调再次返回一个Promise对象
readFile("1")
.then((res) => {
    console.log(res)
    readFile("2")
})
.then((res) => {
    console.log(res) // undefined
    readFile("3")
})

所以如果要按顺序使用then进行链式处理,请保证每个then方法的回调函数都返回一个Promise实例。

附录: 轻轻地摇

posted @ 2021-01-23 17:20  紫苏薄荷  阅读(29)  评论(0编辑  收藏  举报

> To be continued