【问题标题】:What if 2 errors occur at the same time in try / catch through?try/catch through同时出现2个错误怎么办?
【发布时间】:2022-12-10 15:10:05
【问题描述】:

我有一个问题,如何控制 try / catch throw 中的 2 个错误?

我的代码在这里:

try/catch through同时出现2个错误怎么办?

  const downloadFiles = async () => {
    try {
      setKeyState(ValueState.Success);
      setValueState(ValueState.Success);
    } catch (err) {
      if (err instanceof WrongKeyError) {
        setKeyState(ValueState.Error);
      } else if (err instanceof WrongValueError) {
        setValueState(ValueState.Error);
      }
    }
  };

当setKeyState错误时,状态为ValueState.Error 当setValueState错误时,状态为ValueState.Error

但是当两者都错误时,只有一个状态是 ValueState.Error。 为什么以及如何修复它才能使它们的两个状态都是 ValueState.Error?

谢谢你。

【问题讨论】:

    标签: javascript reactjs typescript


    【解决方案1】:

    JavaScript 是单线程的。多个错误不能发生在相同的时间。在这里,如果 setKeyState 抛出,setValueState 的调用将永远无法到达 - 所以即使它抛出错误,也永远不会有 WrongValueError。您需要一个单独的try/catch

    const downloadFiles = async () => {
        try {
            setKeyState(ValueState.Success);
        } catch (err) {
            if (err instanceof WrongKeyError) {
                setKeyState(ValueState.Error);
            }
        }
        try {
            setValueState(ValueState.Success);
        } catch (err) {
            if (err instanceof WrongValueError) {
                setValueState(ValueState.Error);
            }
        }
    };
    

    也就是说,这是很奇怪一个函数可能会抛出这样的同步错误。最好将 setKeyStatesetValueState 设计成不会抛出。

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 1970-01-01
      • 2013-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多