node.js 异步编程

回调函数

//一次读取 a.txt、b.txt、c.txt、文件
const { fstat } = require('fs')

const fs = require('fs')
fs.readFile('./index.js','utf-8',(error,result1)=>{
    if(error==null){
        fs.readFile('./main.js','utf-8',(error,result2)=>{
            if(error==null){
                fs.readFile('./c.txt','utf-8',(error,result3)=>{
                    if(error==null){
                        console.log(result1,'|||',result2,'|||',result3)
                    }
                })
            }
        })
    }
})

//回调地狱,代码可维护性太差

promise

用法:let promise = new Promise((resove,reject)=>{
setTimeout(()=>{

},2000)

})
版本一:

const fs = require('fs');
function f1(){
    return new Promise((resolve, reject) =>{
        fs.readFile('1.txt','utf-8',(err,result)=>{
            if(err==null){
                resolve(result)
            }else {
                reject(err)
            }
        })
    } )
}
function f2(){
    return new Promise((resolve, reject) =>{
        fs.readFile('2.txt','utf-8',(err,result)=>{
            if(err==null){
                resolve(result)
            }else {
                reject(err)
            }
        })
    } )
}

function f3(){
    return new Promise((resolve, reject) =>{
        fs.readFile('3.txt','utf-8',(err,result)=>{
            if(err==null){
                resolve(result)
            }else {
                reject(err)
            }
        })
    } )
}

f1().then(result=>{
    console.log(result)
    return f2()
}).then(result=>{
    console.log(result)
    return f3()
}).then(result=>{
    console.log(result)
})

版本二:异步函数ES7语法
async :
1.在普通函数定义前面加 async关键字,变为异步函数
2.异步函数默认的返回值是promise对象

async function foo(name){
    if(name=='xiaosan'){
        throw '小三必须打'
    }
    return 123;
}
foo('xiaosan').then((data)=>{
    console.log(data)
}).catch((err)=>{
    console.log(err)
})
//throw 抛出异常
//reutrn 正常执行

版本三: async , await
await:
1.只能在异步函数中
2.await promise 可以暂停异步函数,等待promise对象返回结果后在向下执行函数

async function f1() {
    return 'f1'
}

async function f2() {
    return 'f2'
}
async function f3() {
    return 'f3'
}

async function run(){
    let res1 = await f1()
    let res2 = await f2()
    let res3 = await f3()
}
run()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值