利用fs模块读取文件的内容
const fs = require('fs');
fs.readFile('./1.txt','utf8',(err1,result1)=>{
console.log(result1);
fs.readFile('./2.txt','utf-8',(err2,result2)=>{
console.log(result2);
fs.readFile('./3.txt','utf8',(err3,result3)=>{
console.log(result3);
})
})
})
利用Promise处理后
const fs = require('fs');
function f1(){
return new Promise((resolve,reject)=>{
fs.readFile('./1.txt','utf8',(err1,result1)=>{
resolve(result1);
})
});
}
function f2(){
return new Promise((resolve,reject)=>{
fs.readFile('./2.txt','utf8',(err1,result1)=>{
resolve(result1);
})
});
}
function f3(){
return new Promise((resolve,reject)=>{
fs.readFile('./3.txt','utf8',(err1,result1)=>{
resolve(result1);
})
});
}
f1().then((result)=>{
console.log(result);
return f2();
})
.then((result)=>{
console.log(result)
return f3();
})
.then((result=>{
console.log(result)
}))
虽然通过.then避免了回调地域问题,但还是代码量上增加了不少
利用async和await关键字
const fs = require('fs');
// 利用promisify函数把fs.readFile封装成为promise对象
const promisify = require('util').promisify;
const readFile = promisify(fs.readFile);
console.log(readFile);
async function run(){
try{
let r1 = await readFile('./1.txt','utf-8');
let r2 = await readFile('./2.txt','utf-8');
let r3 = await readFile('./3.txt','utf-8');
console.log(r1,r2,r3);
}catch(e){
console.log(e);
}
}
run();
这样不仅代码量看着少,而且将异步代码按照同步来写