【问题标题】:Then code of an axios.get not completed and error catched然后 axios.get 的代码未完成并捕获错误
【发布时间】:2020-02-19 15:21:42
【问题描述】:

我正在尝试使用 console.log 跟踪了解以下代码的流程:

function fetchTsValues() {

    console.log("fetchTsValues");

    axios.get(urlValues)
        .then(result => valuesToChannel(result.data))
        .catch(() => setError('Impossible to get TS values'));
}

useEffect(() => {
    fetchTsValues();
}, []);

function valuesToChannel(TSDetailAPI) {

    console.log(TSDetailAPI);
    console.log("valuesToChannel");

    const updatedChannels = {...channels};
    console.log("updatedChannels - 1", updatedChannels);
    updatedChannels[TSDetailAPI.name].series = buildSeries(TSDetailAPI.values);

    console.log("updatedChannels - 2", updatedChannels);
    setChannels(updatedChannels);
    setIsLoading(false);
}

console.log("error", error);

痕迹如下:

fetchTsValues
valuesToChannel
updatedChannels - 1 {demo-temperature-1: {…}}
error Impossible to get TS values

我不明白为什么我开始运行valuesToChannel 初始指令,然后被fetchTsValues axios.get 的捕获停止。 get 正常运行,返回状态码为 200。

我可以理解完成then,然后如果没有兑现承诺就转移到catch。但是这里的代码甚至没有结束then 子句。 我做错了什么或不理解?

注意:此代码是更广泛的反应上下文的一部分。但我认为我已经正确地弄清楚了一个简化的上下文。

【问题讨论】:

  • 你可能会得到一个 200 状态码的值,但是如果你在 valuesToChannel 函数中抛出一个错误,它仍然会被你的 .catch 捕获,因为它在你的 Promise 链中被调用。是否有可能 buildSeries 给出错误?您可以尝试将 valuesToChannel 的内部包装在 Try/Catch 块中以缩小范围。 Try...catch
  • @Charlie 感谢您的宝贵评论。这似乎是找到我的错误的有希望的方法。

标签: javascript reactjs promise axios


【解决方案1】:

感谢Charlie,我能够修复我的错误。

我了解到,使用 Try...catch 可以有效地检测在意外代码区域中引发的错误!

【讨论】:

    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2011-01-10
    相关资源
    最近更新 更多