promise介绍
ES6教程传送门:http://es6.ruanyifeng.com/#docs/promise
Promise是什么?
Promise是一个构造函数,用于创建Promise对象
Promise对象:可以理解为一个处理异步操作的容器
promise本质 不是控制异步代码的执行顺序(无法控制) , 而是控制异步代码结果处理的顺序
Promise作用:解决回调地狱
回调地狱:异步回调层层嵌套
promise使用
使用流程
1.创建promise实例对象
let p = new Promise( (resolve,reject)=>{
//异步操作 } )
2.调用实例对象的then方法
p.then(data=>{
//处理成功数据 } , err=>{
//处理失败结果 })
promise有三种状态
- pending(进行中)
- fulfilled(已成功)
- rejected(已失败)
Promise状态改变只有两种情况(过程不可逆)
- 从pending(进行中)变为fulfilled(成功)
- 从pending(进行中)变为rejected(失败)
注意点
- Promise对象在创建的时候,里面的异步就会立即执行
- 不要在创建promise的时候处理异步结果,应该调用resolve()或者reject()交给then()方法来处理
- promise解决回调地狱 : 在上一个promise的then方法中返回下一个promise实例对象
需求:依次读取abcd四个文件
const fs = require('fs');
//Promise是一个构造函数,用于创建promise实例
//(1)调用Promise构造函数,生成promise实例对象
/*
参数:回调函数 (resolve,reject)=>{
//你想要的异步操作 }
resolve : 完成回调
reject : 失败回调
*/
let p1 = new Promise((resolve, reject) => {
//异步操作: 读取文件a
fs.readFile(`${
__dirname}/data/a.txt`, 'utf8', (err, data) => {
if (!err) {
//成功
/*
(1)resolve:执行then方法里面的第一个函数
(2)resolve底层原理:修改promise状态从pending(进行中)变为fulfilled(成功)
*/
resolve(data);
} else {
//失败
/*
(1)reject:执行then方法里面的第二个函数
(2)rreject底层原理:修改promise状态从pending(进行中)变为rejected(失败)
*/
reject(err);
}
});
});
let p2 = new Promise((resolve, reject) => {
//异步操作: 读取文件a
fs.readFile(`${
__dirname}/data/b.txt`, 'utf8', (err, data) => {
if (!err) {
//成功
resolve(data);
} else {
//失败
reject(err);
}
});
});
let p3 = new Promise((resolve, reject) => {
//异步操作: 读取文件a
fs.readFile(`${
__dirname}/data/c.txt`, 'utf8', (err, data) => {
if (!err) {
//成功
resolve(data);