还记得去年实习参加秋招,二面面试官龙哥(现在的组长)问了一个面试题,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;
}
这两个请求真的是并发,因为它们是异步函数,但是获取结果后的赋值时继发
现在想想好简单,当时都不会。