async和await结合读取多个文件

现有三个md文件如下:
part1.md
async和await结合读取多个文件_第1张图片

part2.md
async和await结合读取多个文件_第2张图片

鱼遇.md
async和await结合读取多个文件_第3张图片

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

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

输出结果:
async和await结合读取多个文件_第4张图片
async和await结合读取多个文件_第5张图片

你可能感兴趣的:(Promise,async,await)