您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为何流行的JavaScript运行时无法处理看起来像同步的异步脚本?

为何流行的JavaScript运行时无法处理看起来像同步的异步脚本?

为什么不?没有理由,只是没有完成。

在2017年,它 在ES2017中完成:async函数可以用于await等待,无阻塞地等待承诺的结果。如果getSomething返回promise(请注意await)并且位于async函数内部,则可以这样编写代码

try 
{
    var foo = await getSomething();
    var bar = doSomething(foo);  
    console.log(bar); 
} 
catch (error) 
{
    console.error(error);
}

(我曾假设您只打算getSomething异步,但两者都可能是异步的。)

实时示例(需要最新的浏览器,例如最新的Chrome):

function getSomething() {

    return new Promise((resolve, reject) => {

        setTimeout(() => {

            if (Math.random() < 0.5) {

                reject(new Error("Failed"));

            } else {

                resolve(Math.floor(Math.random() * 100));

            }

        }, 200);

    });

}

function doSomething(x) {

    return x * 2;

}

(async () => {

    try

    {

        var foo = await getSomething();

        console.log("foo:", foo);

        var bar = doSomething(foo);

        console.log("bar:", bar);

    }

    catch (error)

    {

        console.error(error);

    }

})();


The first promise fails half the time, so click Run repeatedly to see both failure and success.

您已用NodeJS标记了您的问题。如果将Node API包装在Promise中(例如,使用promisify),则可以编写异步运行的漂亮的直接同步代码

javascript 2022/1/1 18:16:09 有518人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶