7.x的Node 能支持async/await
可谓是大快人心,浏览器上也能通过babel
转换成es5
来耍
不过async/await
毕竟是有传染性的,你一个地方使用了 所有的调用的地方都得用
async function fun1(){
return await new Promise(function(resolve){
setTimeout(function(){
resolve('resolved');
},2*1000);
});
}
async function fun2(){
let d;
try{
d = await fun1();
}catch(e){}
return d;
}
(async ()=>{
console.log('---->');
let d = await fun2();
console.log('d=',d);
})();
如上面的栗子,fun1
开始 沿路一直到最后必须都加上async/await
关键字,这就非常蛋疼了,因为一旦漏了就有可能会出问题,而在某些极端的情况下势必每个function
都是写成async function
的
不知道现在大家是怎么处理这样的问题的?
通篇都加async
么?
特别是通过babel
转换之后的状态机很复杂,不好调试.
当然 如果你当中的
fun2
只是单纯的return
操作,可以不加,不过既然多个function
肯定会引入其它处理,这里只是简化下例子而已
谢谢.
这段的async/await多此一举,说明你还没明白async function的本质。
改这样就够了。
这下就发现了吧?
async function
的本质就是对Promise的封装。不想用await,就得用then()。
对比
.then().then().then().then()
,或者回调金字塔
,你还嫌async/await麻烦么?最后一个可以fun1().then() fun2().then()
promise上不用加async,直接返回一个promise就可以了。