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实例。