Node.js的异步编程

冷暖自知 提交于 2020-03-12 02:54:35

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最为方便。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!