Node.js异步编程的模式
异步编程的线程容易发生冲突问题,很容易陷入回调地狱,可用下面几个方式解决一下。
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)
})