promise
为什么要使用promise
promise的出现是为了解决回调地狱(callback hell)而是让回调变得线性可控,以便于代码得修改和维护。
promise的基本使用
有promise1.txt,promise2txt,promise3txt文件,需要依次打印其中的内容。
//3次回调
fs.readFile('./promise1.txt',{encoding:'utf-8'},(err,data)=>{
if(err){
return err
}
console.log(data)
fs.readFile('./promise2.txt',{encoding:'utf-8'},(err,data)=>{
if(err){
return err
}
console.log(data)
fs.readFile('./promise3.txt',{encoding:'utf-8'},(err,data)=>{
if(err){
return err
}
console.log(data)
})
})
})
使用promise:
function readFile(url){
return new Promise((resolve,reject)=>{
fs.readFile(url,{encoding:'utf-8'},(err,data)=>{
if(err){
reject(err)
}
// console.log(data)
resolve(data)
})
})
}
let p1 = readFile('./promise1.txt');
let p2 = readFile('./promise2.txt');
let p3 = readFile('./promise3.txt');
p1.then((data)=>{
console.log(data)
return p2;
}).then(data=>{
console.log(data)
return p3
}).then(data=>{
console.log(data)
}).catch(err=>{
console.log(err)
})
使用async、await
function readFile(url){
return new Promise((resolve,reject)=>{
fs.readFile(url,{encoding:'utf-8'},(err,data)=>{
if(err){
reject(err)
}
// console.log(data)
resolve(data)
})
})
}
let p1 = readFile('./promise1.txt');
let p2 = readFile('./promise2.txt');
let p3 = readFile('./promise3.txt');
async function read(){
const data1 = await p1;
console.log('====0=====',data1);
const data2 = await p2;
console.log('====1=====',data2);
const data3 = await p3;
console.log('====2=====',data3);
}
read();