async和await结合读取多个文件

现有三个md文件如下:
part1.md
在这里插入图片描述

part2.md
在这里插入图片描述

鱼遇.md
在这里插入图片描述

需求:读取以上三个文件的内容并输出。

首先,回顾一下用Promise的then链式调用读取多个文件是如何实现的呢?

代码如下:

//promise的then链式调用实现
//引入fs模块
const fs=require('fs');

const p=new Promise((resolve,reject)=>{
    fs.readFile('./part1.md',(err,data)=>{
        if(err){
            reject(err);
        }else{
            resolve(data);
        }
    });
});

p.then(function(value){
    return new Promise((resolve,reject)=>{
        fs.readFile('./part2.md',(err,data)=>{
            if(err){
                reject(err);
            }else{
                resolve([value,data]);
            }
        })
    })
}).then(function(value){
    return new Promise((resolve,reject)=>{
        fs.readFile('./鱼遇.md',(err,data)=>{
            if(err){
                reject(err);
            }else{
                value.push(data);
                resolve(value);
            }
        })
    })
}).then(value=>console.log(value.join('\r\n')));

首先要知道,调用then方法,返回的结果是Promise对象,对象状态由回调函数的返回结果决定。此处利用了其中一种情况:如果回调函数返回的是一个成功的Promise对象,那么then方法的返回值是一个PromiseStatus为resolved,PromiseValue为成功信息的Promise对象,后续链式调用同理。

接下来看另一种实现方法——async和await结合读取多个文件
代码如下:

//1、引入fs模块
const fs=require('fs');

//读取part1.md
function readPart1(){
    return new Promise((resolve,reject)=>{
        fs.readFile('./part1.md',(err,data)=>{
            if(err){
                reject(err);
            }else{
                resolve(data);
            }
        })
    });
}

//读取part2.md
function readPart2(){
    return new Promise((resolve,reject)=>{
        fs.readFile('./part2.md',(err,data)=>{
            if(err){
                reject(err);
            }else{
                resolve(data);
            }
        })
    });
}

//读取鱼遇.md
function readMeet(){
    return new Promise((resolve,reject)=>{
        fs.readFile('./鱼遇.md',(err,data)=>{
            if(err){
                reject(err);
            }else{
                resolve(data);
            }
        })
    });
}

//await表达式要放在async函数中
//声明一个async函数
async function readLyrics(){
    let part1=await readPart1();
    let part2=await readPart2();
    let meet=await readMeet();

    console.log(part1.toString());
    console.log(part2.toString());
    console.log(meet.toString());
}

readLyrics();

这个方法利用的是:“await p表达式的值为Promise对象p的PromiseValue值”,因此async函数中part1、part2、meet即为读取三个文件的结果,然后挨个输出就行啦~

输出结果:
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值