reactjs 如果在try / catch through中同时发生2个错误怎么办?

pjngdqdw  于 2022-12-12  发布在  React
关注(0)|答案(1)|浏览(186)

我有一个问题,我如何控制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错误当setValueState错误时,状态为ValueState错误
但是当两个都是错误的时候,只有一个状态是ValueState. Error。为什么以及如何修复它,使它们的两个状态都是ValueState.Error?

  • 谢谢-谢谢
6psbrbz9

6psbrbz91#

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设计成不抛出同步错误。

相关问题