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即为读取三个文件的结果,然后挨个输出就行啦~

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

Guess you like

Origin blog.csdn.net/Amethystlry/article/details/113783165