async/await 阻塞了,如何异步不阻塞/并发

前提:
1.async 函数返回的是一个promise;
2.await async函数,将异步逻辑,同步阻塞实现。

Q:你写了一个async function,但是它偶尔需要异步不阻塞使用。

比如:存数据到Redis,如果需要存储是否成功,或者存储后马上就要使用,必须await 一个async function。
但是当你不关心存储成功,也不需要马上使用,没必要阻塞在那里,耗费用户等待时间。

A:同步阻塞+异步非阻塞写法

async function(){
//同步阻塞写法
await asyncFunA();
//other codes……

//异步不阻塞

//如果完全没有依赖asyncFunA中的操作
asyncFunA();

//如果完全有依赖asyncFunA中的操作
//异步不阻塞
asyncFuncA().then(res=>{
//等promise resolve了之后需要做的事情
//coding here
})
//不依赖asyncFuncA返回值的other codes……
}

Q:部分异步函数不阻塞,部分需要阻塞。不阻塞的多个相当于并发

A:实现并发

async function(){
//同步阻塞写法
let resultA = await asyncFunA();
let resultB = await asyncFunB();
//other codes……

//异步不阻塞
let asyncA = asyncFunA();//异步非阻塞
let asyncB = asyncFunB();

let resultA = await asyncA; //等到需要的时候再去阻塞
let resultB = await asyncB;

//大量并发
await Promise.all([asyncFunA,asyncFunB]);
//需要拿返回值的话
await Promise.all([asyncFunA,asyncFunB]).then(([resultA ,resultB])=>{});
}

http://www.infoq.com/cn/articles/javascript-async-await-the-good-part-pitfalls-and-how-to-use

你可能感兴趣的:(async/await 阻塞了,如何异步不阻塞/并发)