NodeJS在特定情况下使用错误

宽支柱

我正在使用以下可以正常工作的功能,但是我在错误处理方面存在一些问题

例如

我想捕获所有功能的通用错误

如果fn1fn2返回任何错误,该函数应抛出“发生一般错误”

这是我需要的

如果getData2没有特定的属性值(请参见if),则返回uniq错误,uniq error occurred不是一般错误...

这是工作示例

https://jsfiddle.net/8duz7n23/

async function func1() {
  try {
    const data = await getData1()
    console.log(data)
    const data2 = await getData2();
    if (!data2.url === !"https://test2.com") {
      throw new Error("uniq error occurred  ")
    }
    return data2.url
  } catch (e) {
    throw new Error("generic error occurred ")
  }
}

async function getData1() {
  return "something"
}

async function getData2() {
  return {
    url: "http://test.com"
  }
}

func1().then(result => {
  console.log(result);
}).catch(error => {
  console.log(error);
});

现在,如果我抛出uniq错误,则catch将引发一般错误。

我希望万一func2出现一些错误,它仍然会丢弃一般错误,但是即使doenst具有正确的url,也要一路向上拖动uniq error...

有没有更干净的方法可以在nodejs中做到这一点?

我不想对捕获中的消息使用if语句...

我想该遗嘱抛出上层的功能,而不是捕捉

勇敢的大师

为了将错误传播到“上层”,您必须将其再次放入catch块中。

您可以添加您的自定义错误类型,并检查该错误是否是您要查找的错误。

class UrlMismatchError extends Error {
  name="UrlMismatchError"
}

async function func1() {
  try {
    const data = await getData1()
    console.log(data)
    const data2 = await getData2();
    if (data2.url !== "https://test2.com") {
      throw new UrlMismatchError("uniq error occured");
    }
    return data2.url
  } catch (e) {
    if (e instanceof UrlMismatchError) {
      throw e;
    } else {
      // handle generic errors
      throw new Error("generic error occured");
    }
  }
}

async function getData1() {
  return "something"
}

async function getData2() {
  return {
    url: "http://test.com"
  }
}

func1().then(result => {
  console.log(result);
}).catch(error => {
  console.error(error.message);
});

我不想对捕获中的消息使用if语句...

我希望将遗嘱扔给上级职能部门而不是抓住

不,您不能那样做,因为javascript不是Java,因此您不能执行以下操作:

// the code snippet below wont work
try {
  doSomething();
} catch(UrlMismatchError e) {
  // propagate error to the upper level
  throw e;
} catch(Error e) {
  // handle all the other errors
  console.log(e);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

GDI +通用错误仅在特定情况下[C#]

来自分类Dev

特定情况下的分段错误

来自分类Dev

在特定情况下使用控件结构显示表单

来自分类Dev

在特定情况下如何使用高阶结构

来自分类Dev

NodeJS:在特定情况下,http.ClientRequest会引发两次错误事件

来自分类Dev

特定情况下的时序图

来自分类Dev

在特定情况下替换字符

来自分类Dev

特定情况下的开关盒

来自分类Dev

opencv的某些功能在某些特定情况下显示错误

来自分类Dev

为什么在这种特定情况下扫描仪输入显示错误?

来自分类Dev

隐藏横向标签页,但在特定情况下会重新出现(错误)

来自分类Dev

opencv的某些功能在某些特定情况下显示错误

来自分类Dev

在这种特定情况下如何使用break子句

来自分类Dev

在这种特定情况下,使用apt-get autoremove命令安全吗?

来自分类Dev

在特定情况下使用Python进行列表理解

来自分类Dev

在这种特定情况下,使用apt-get autoremove命令安全吗?

来自分类Dev

使用 React / Redux 在特定情况下检索过滤后的数组长度

来自分类Dev

如何在整个游戏的特定情况下使用玩家的输入

来自分类Dev

在特定情况下未调用Firebase onDataChange

来自分类Dev

在特定情况下显示和隐藏弹出窗口

来自分类Dev

在特定情况下未绘制视图

来自分类Dev

在特定情况下如何抑制声纳法则?

来自分类Dev

在特定情况下的功能依赖性

来自分类Dev

在特定情况下显示和隐藏弹出窗口

来自分类Dev

选择器在特定情况下的独占CSS

来自分类Dev

在特定情况下未绘制视图

来自分类Dev

如何在特定情况下捕获OnTouchEvent?

来自分类Dev

在特定情况下如何抑制声纳法则?

来自分类Dev

在特定情况下,如何使JRadioButton透明?

Related 相关文章

  1. 1

    GDI +通用错误仅在特定情况下[C#]

  2. 2

    特定情况下的分段错误

  3. 3

    在特定情况下使用控件结构显示表单

  4. 4

    在特定情况下如何使用高阶结构

  5. 5

    NodeJS:在特定情况下,http.ClientRequest会引发两次错误事件

  6. 6

    特定情况下的时序图

  7. 7

    在特定情况下替换字符

  8. 8

    特定情况下的开关盒

  9. 9

    opencv的某些功能在某些特定情况下显示错误

  10. 10

    为什么在这种特定情况下扫描仪输入显示错误?

  11. 11

    隐藏横向标签页,但在特定情况下会重新出现(错误)

  12. 12

    opencv的某些功能在某些特定情况下显示错误

  13. 13

    在这种特定情况下如何使用break子句

  14. 14

    在这种特定情况下,使用apt-get autoremove命令安全吗?

  15. 15

    在特定情况下使用Python进行列表理解

  16. 16

    在这种特定情况下,使用apt-get autoremove命令安全吗?

  17. 17

    使用 React / Redux 在特定情况下检索过滤后的数组长度

  18. 18

    如何在整个游戏的特定情况下使用玩家的输入

  19. 19

    在特定情况下未调用Firebase onDataChange

  20. 20

    在特定情况下显示和隐藏弹出窗口

  21. 21

    在特定情况下未绘制视图

  22. 22

    在特定情况下如何抑制声纳法则?

  23. 23

    在特定情况下的功能依赖性

  24. 24

    在特定情况下显示和隐藏弹出窗口

  25. 25

    选择器在特定情况下的独占CSS

  26. 26

    在特定情况下未绘制视图

  27. 27

    如何在特定情况下捕获OnTouchEvent?

  28. 28

    在特定情况下如何抑制声纳法则?

  29. 29

    在特定情况下,如何使JRadioButton透明?

热门标签

归档