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

使用Async / Await正确尝试…捕获语法

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

使用Async / Await正确尝试…捕获语法

似乎最好的做法是不要在try主体中放置多行业务逻辑

其实我会说是的。通常,您需要使用该值来处理

catch
所有 异常:

try {    const createdUser = await this.User.create(userInfo);    console.log(createdUser)    // business logic goes here} catch (error) {    console.error(error) // from creation or business logic}

如果您只想抓住并处理承诺中的错误,则有三种选择:

  • 在外部声明变量,然后根据是否存在异常进行分支。可以采用多种形式,例如

    • catch
      块中的变量分配一个默认值
    • return
      早期或重新
      throw
      从异常
      catch
    • 设置一个标志,该
      catch
      块是否捕获到异常,并在一定
      if
      条件下对其进行测试
    • 测试要分配的变量的值

      let createdUser; // or use

      var
      inside the block
      try {
      createdUser = await this.User.create(userInfo);
      } catch (error) {
      console.error(error) // from creation
      }
      if (createdUser) { // user was successfully created
      console.log(createdUser)
      // business logic goes here
      }


  • 测试捕获到的异常的类型,然后根据该异常进行处理或重新抛出。

    try {const createdUser = await this.User.create(userInfo);// user was successfully createdconsole.log(createdUser)// business logic goes here

    } catch (error) {
    if (error instanceof CreationError) {
    console.error(error) // from creation
    } else {
    throw error;
    }
    }

不幸的是,标准Javascript(仍然)不支持条件异常的语法。

  • 使用
    then
    两个回调,而不是
    try
    /
    catch
    。这确实是最丑陋的方式,我个人的建议也是出于其简单性和正确性,而不是依靠标记的错误或结果值的外观来区分对承诺的实现和拒绝:
    await this.User.create(userInfo).then(createdUser => {// user was successfully createdconsole.log(createdUser)// business logic goes here

    }, error => {
    console.error(error) // from creation
    });

当然,它带有引入回调函数的缺点,这意味着您不能像从外部函数那样轻松地

break
/
continue
循环或执行早期操作
return



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

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

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