【发布时间】: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