栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在顶层使用异步/等待?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在顶层使用异步/等待?

我似乎无法绕开为什么这行不通的想法。

因为

main
回报承诺;所有
async
功能都可以。

在顶层,您必须:

  1. 使用

    async
    永远不会拒绝的顶层函数(除非您希望出现“未处理的拒绝”错误),或者

  2. 使用

    then
    catch
    ,或

  3. (即将推出!) 使用顶层

    await
    ,该提案已进入允许在模块中顶层使用的过程中的第3阶段
    await

#1-
async
永不拒绝的顶级功能

(async () => {    try {        var text = await main();        console.log(text);    } catch (e) {        // Deal with the fact the chain failed    }})();

注意

catch
; 您 _必须_处理promise拒绝/异步异常,因为没有其他事情要做;您没有呼叫者将其传递给。如果愿意,可以在通过
catch
函数调用它的结果上执行此操作(而不是
try
/
catch
语法):

(async () => {    var text = await main();    console.log(text);})().catch(e => {    // Deal with the fact the chain failed});

…更加简洁(出于这个原因,我喜欢它)。

或者,当然,不处理错误,而只允许“未处理的拒绝”错误。

#2-
then
catch

main()    .then(text => {        console.log(text);    })    .catch(err => {        // Deal with the fact the chain failed    });

catch
如果发生在链中或在你的错误处理程序将调用
then
处理程序。(请确保您的
catch
处理程序不会抛出错误,因为没有任何内容可以处理。)

或两个参数都

then

main().then(    text => {        console.log(text);    },    err => {        // Deal with the fact the chain failed    });

再次注意,我们正在注册一个拒绝处理程序。但是,以这种形式,请确保您的

then
回调都不会引发任何错误,也没有任何内容可处理。

#3顶级
await
模块

您不能

await
在非模块脚本的顶层使用
await
,但是顶层[建议第3阶段)允许您在模块的顶层使用它。这与使用顶级
async
函数包装器(上面的#1)相似,因为您不希望您的顶级代码拒绝(抛出错误),因为这将导致未处理的拒绝错误。因此,除非您要在出现问题时(例如#1)遇到未处理的拒绝,否则您要将代码包装在错误处理程序中:

// In a module, once the top-level `await` proposal landstry {    var text = await main();    console.log(text);} catch (e) {    // Deal with the fact the chain failed}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416046.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号