async await 如何解决 传染性/传播性

发布于 2022-09-04 03:54:25 字数 1004 浏览 11 评论 0

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肯定会引入其它处理,这里只是简化下例子而已

谢谢.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

霞映澄塘 2022-09-11 03:54:25

这段的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麻烦么?

汐鸠 2022-09-11 03:54:25

最后一个可以fun1().then() fun2().then()

箹锭⒈辈孓 2022-09-11 03:54:25

promise上不用加async,直接返回一个promise就可以了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文