Node.js异步编程的模式
异步编程的线程容易发生冲突问题,很容易陷入回调地狱,可用下面几个方式解决一下。
1.回调函数
1)回调套回调
const fs = require('fs')
fs.readFile('index.html','utf8',(err,data)=>{
if(err)throw err
console.log(data)
fs.readFile('list.html','utf8',(err,data)=>{
if(err)throw err
console.log(data)
fs.readFile('detail.html','utf8',(err,data)=>{
if(err)throw err
console.log(data)
})
})
})
2)Promise对象
const fs = require('fs')
function p1(){
return new Promise(async(resolve,reject)=>{
fs.readFile('index.html','utf8',(err,data)=>{
resolve(data)
})
})
}
function p2(){
return new Promise(async(resolve,reject)=>{
fs.readFile('list.html','utf8',(err,data)=>{
resolve(data)
})
})
}
function p3(){
return new Promise(async(resolve,reject)=>{
fs.readFile('detail.html','utf8',(err,data)=>{
resolve(data)
})
})
};
p1().then(result =>{
console.log(result)
return p2()
}).then(result =>{
console.log(result)
return p3()
}).then(result =>{
console.log(result)
return p2()
})
3)async和await
const fs = require('fs')
async function p1(){
return new Promise(async(resolve,reject)=>{
await fs.readFile('index.html','utf8',(err,data)=>{
resolve(data)
})
})
}
async function p2(){
return new Promise(async(resolve,reject)=>{
await fs.readFile('list.html','utf8',(err,data)=>{
resolve(data)
})
})
}
async function p3(){
return new Promise(async(resolve,reject)=>{
await fs.readFile('detail.html','utf8',(err,data)=>{
resolve(data)
})
})
};
p1().then(result =>{
console.log(result)
})
p2().then(result =>{
console.log(result)
})
p3().then(result =>{
console.log(result)
})
总结下
1,2这两种方法都可以让文件按顺序读取,其中1不推荐使用,用起来很不好,容易形成回调地狱。使用async和await最为方便。
来源:CSDN
作者:Hongxuew
链接:https://blog.csdn.net/Hongxuew/article/details/104805299