async await如何实现并发

还记得去年实习参加秋招,二面面试官龙哥(现在的组长)问了一个面试题,async await如何实现并发?今晚突然又想起来,赶紧整理一下。

举例

var fs=require('fs');
var read=function (path) {
     
    return new Promise((resolve,reject)=>{
     
            fs.readFile(path,(err,data)=>{
     
                if(err){
     
                    reject(err)
                }else{
     
                    resolve(data)
                }
            })
    })
}
//继发读取
async function ReadTwo(){
     
    var f1=await read('./a.txt');
    var f2=await read('./b.txt');
}

解决方案

(1) promise.all()

async function readTwo{
     
	var p=Promise.all([read('./a.txt'),read('./b.txt')]);
	var [f1,f2]=await p
}

因为promise.all是并发,所以这两个请求真正达到并发

(2)没法描述,看代码

async function readTwo{
     
	var p1=read('./a.txt');
	var p2=read('./a.txt');
	f1=await p1;
	f2=await p2;
}

这两个请求真的是并发,因为它们是异步函数,但是获取结果后的赋值时继发


现在想想好简单,当时都不会。

你可能感兴趣的:(js,es6/es7,promise,async,await)