gpt4 book ai didi

javascript - 有没有好的方法来调试失败的 promise ?

转载 作者:行者123 更新时间:2023-11-28 16:59:53 25 4
gpt4 key购买 nike

我在 Promise 的 .then block 上有一个拼写错误,并且 Promise 一直失败。我想我没有意识到是否有一种类型会转到 .catch。经过相当多的挖掘才发现这是错误(一直假设promise/async/etc调用出了问题。)

有没有办法让 JS 告诉我“嘿,你的 .then block 中有一个错误!”

代码

     searchAPI(name)
.then(data => {
// typo was LowerCase instead of toLowerCase
let filtereddowndata = data
.filter(item =>
item.title.toLowerCase().includes(name.LowerCase())
)
etc etc

})
.catch(function() {
console.log("no match found"); // kept going here.
});

最佳答案

发送到 .catch() 的实际错误(您在代码中忽略了该错误)会给您一个很好的线索,为什么 .catch() 是这样的被触发。使用这样的东西:

.catch(function(e) { 
console.log(e);
// any other processing code here
});

我总是确保在我的 .catch() 语句中记录实际错误,这样我总是可以准确地看到它被触发的原因,并且不会盲目地假设代码是如何到达这里的。

这也是为什么当你没有任何 .catch() 时,node.js 会使其成为控制台警告(并最终成为运行时错误),因为 try/catch如果您不在 .catch() 中公开错误,内置于 .then() 中的 将会隐藏错误。

<小时/>

在这种情况下,以上内容足以为您提供精确的错误。但在其他情况下(出于调试目的),您有时可以通过在代码的更多本地化区域插入自己的 try/catch 语句而受益。这还会向您显示 .then() 处理程序中发生的情况。

您可以运行此代码片段来查看实际的错误。

     // simulate your searchAPI() call
function searchAPI() {
return new Promise(resolve => {
resolve([{title: "Superman"}, {title: "Spiderman"}]);
});
}

let name = "Joe";

searchAPI(name).then(data => {
// typo was LowerCase instead of toLowerCase
let filtereddowndata = data.filter(item =>
item.title.toLowerCase().includes(name.LowerCase())
);
}).catch(function(e) {
// console.log(e) will work with normal Javascript
// here in a stackoverflow snippet where console.log has been replaced
// you have to look at console.log(e.message) to see the error
console.log("searchAPI failed - ", e.message);
});

关于javascript - 有没有好的方法来调试失败的 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57835178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com