前提:
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