1. Promise的基本原理
-
先看图
image.png
其中,resolve表示成功时的状态,reject表示失败时的状态
2. Promise的基本语法
const fs = require('fs');
let p1 = new Promise(function(resolve, reject) {
fs.readFile('./data/a.txt', 'utf8', function(err, data) {
if(err) {
reject(err)
}else {
resolve(data)
}
})
})
let p2 = new Promise(function(resolve, reject) {
fs.readFile('./data/b.txt', 'utf8', function(err, data) {
if(err) {
reject(err)
}else {
resolve(data)
}
})
})
let p3 = new Promise(function(resolve, reject) {
fs.readFile('./data/c.txt', 'utf8', function(err, data) {
if(err) {
reject(err)
}else {
resolve(data)
}
})
})
p1.then(function(data) {
console.log(data);
return p2;
}, function(err) {
console.log(err)
}).then(function(data) {
console.log(data);
return p3;
}).then(function(data) {
console.log(data)
})
Promise构造函数
需要传入一个函数,这个函数有两个参数,第一个参数是resolve
,成功时调用,第二个参数是reject
,失败的时候调用。然后,Promise构造函数
返回一个Promise对象
,这个对象身上有个then()
方法,该方法也接受两个参数,第一个参数就是resolve
函数,第二个参数就是reject
函数,resolve
方法表示成功时执行,如果代码最后return
回一个Promise对象
那么可以接着调用then()
方法。
3. 封装Promise版本的readfile方法
const fs = require('fs');
function pReadFile(filePath) {
return new Promise(function (resolve, reject) {
fs.readFile(filePath, 'utf8', function (err, data) {
if (err) {
reject(err);
} else {
resolve(data)
}
})
})
}
pReadFile('./data/a.txt')
.then(function(data) {
console.log(data);
return pReadFile('./data/b.txt');
})
.then(function(data) {
console.log(data);
return pReadFile('./data/c.txt');
})
.then(function(data) {
console.log(data);
})