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肯定会引入其它处理,这里只是简化下例子而已
谢谢.
欧阳克2016-11-16 15:15:27
这段的async/await多此一举,说明你还没明白async function的本质。
async function fun1(){ return await new Promise(function(resolve){ setTimeout(function(){ resolve('resolved'); },2*1000); }); }
改这样就够了。
function fun1(){ return new Promise(function(resolve){ setTimeout(function(){ resolve('resolved'); },2*1000); }); }
这下就发现了吧? async function的本质就是对Promise的封装。
不想用await,就得用then()。
对比.then().then().then().then(),或者回调金字塔,你还嫌async/await麻烦么?