-
promise是es6新引入的异步任务解决方案 在语法上 promise是一个构造函数 promise对象有三种状态 :成功,失败 初始化
const p = new Promise(function (resolve, reject) {
setTimeout(() => {
let data = '获取到了数据库中的数据';
-
调用resolve方法 调完以后 promise对象的状态就会变为成功 成功之后就可以调用promise对象的then方法 例如:
` resolve(data);` -
若获取数据失败,则调用reject方法
let err = '获取数据失败';
reject(err)
}, 1000)
});
4.调用then方法 接受两个函数类型的参数 每个函数有一个形参 成功的形参叫value 失败的形参叫reason
p.then(function (value) {
// 只要p的状态为成功(调用了resolve方法 )就会执行这个函数
console.log(value);
}, function (reason) {
// 失败后,则执行then的第二个函数
console.log(reason);
})
用promise来解决异步编程问题时,需要调用then方法,若异步比较多,会导致then的调用比较多的问题, 例如:
const p = new Promise((resolve, reject) => {
fs.readFile('./resources/为学.md', (err, data) => {
resolve(data);
})
});
p.then((value) => {
return new Promise((resolve, reject) => {
fs.readFile('./resources/插秧诗.md', (err, data) => {
resolve[value, data]
// 此时的value表示为学和插秧诗两个文件压缩成的一个数组
})
})
}).then((value) => {
return new Promise((resolve, reject) => {
fs.readFile('./resources/观书有感.md', (err, data) => {
// 将观书有感压缩进value这个数组中,此时,三个文件在同一个数组中
value.push(data);
resolve(value)
})
})
}).then((value) => {
console.log(value.join('\r\n'));
// 这个value为含有三个文件的数组
})
后来es6就有了async和await函数用于异步编程。那么这两个函数的用法就下次再给大家讲解吧