fs.readFile(__dirname + '/data/a.txt', (err, data)=>{
if(!err){
console.log(data.toString());
fs.readFile(__dirname + '/data/b.txt', (err, data)=>{
if(!err){
console.log(data.toString());
}
fs.readFile(__dirname + '/data/cc.txt', (err, data)=>{
if(!err){
console.log(data.toString());
}
});
});
}
});
异步请求解决方案
异步操作是一个无法预测的事情,要么成功,要么失败
容器内部有三种状态
注意: 状态不可回退
创建Promise对象 (一经创建,立即执行)
resolve用来返回失败的结果
reject用来返回成功的结果
注意:resolve和reject只能传一个值,多个值要用对象或数组传输。
new Promise((resolve, reject)=>{
resolve(1, 2, 222, 333);
}).then((data1,data2)=>{
console.log(data1,data2);
});
const fs = require('fs');
new Promise((resolve, reject)=>{
fs.readFile(__dirname + '/data/a.txt', (err, data)=>{
if(err){
reject(err);
}
resolve(data);
});
}).then((data)=>{
console.log(data.toString());
return new Promise((resolve, reject)=>{
fs.readFile(__dirname + '/data/b.txt', (err, data)=>{
if(err){
reject(err);
}
resolve(data);
});
});
}).then((data)=>{
console.log(data.toString());
return new Promise((resolve, reject)=>{
fs.readFile(__dirname + '/data/cc.txt', (err, data)=>{
if(err){
reject(err);
}
resolve(data);
});
});
}).then((data)=>{
console.log(data.toString());
});
const fs = require('fs');
readFile(__dirname + '/data/b.txt').then((data)=>{
console.log(data.toString());
return readFile(__dirname + '/data/a.txt');
}).then((data)=>{
console.log(data.toString());
return readFile(__dirname + '/data/cc.txt');
}).then((data)=>{
console.log(data.toString());
});
function readFile(...args){
return new Promise((resolve, reject)=>{
fs.readFile(...args, (err, data)=>{
if(err){
reject(err);
}
resolve(data);
})
});
}
通过promist.all接收全部promise
const fs = require('fs');
const path = require('path');
let readFile = (...args) => {
return new Promise((resolve, reject) => {
fs.readFile(...args, (err, data) => {
if (err) {
reject(err);
}
resolve(data);
});
});
};
Promise.all([
readFile(path.join(__dirname, 'data/aa.txt'), 'utf-8'),
readFile(path.join(__dirname, 'data/b.txt'), 'utf-8'),
readFile(path.join(__dirname, 'data/c.txt'), 'utf-8')
]).then(([data1, data2, data3])=>{
console.log({data1, data2, data3});
}).catch((err)=>{
console.log(err);
});
在链条最后加一个catch,一旦有一个地方错误,都会执行该catch
const fs = require('fs');
readFile(__dirname + '/data/b.txt').then((data)=>{
console.log(data.toString());
return readFile(__dirname + '/data/aa.txt');
}).then((data)=>{
console.log(data.toString());
return readFile(__dirname + '/data/cc.txt');
}).then((data)=>{
console.log(data.toString());
}).catch(err => {
console.log(err);
});
function readFile(...args){
return new Promise((resolve, reject)=>{
fs.readFile(...args, (err, data)=>{
if(err){
reject(err);
}
resolve(data);
})
});
}