我在 try block 内使用 try catch 来打印相关消息或了解哪个方法发生了错误。
代码片段
for (const searchUrl of savedSearchUrls) {
console.log("here");
// function will get all the links of profiles in saved search url
try {
const links = await scrapeFromurl(browser, searchUrl);
try {
saveToDatabase(links);
} catch (e) {
handleError(e, "eror while saving to database");
}
} catch (err) {
handleError(err, "error in scrapeFromurl()");
}
}
我在 google 上搜索过,但找不到相关主题。
还有哪些其他方法可以完成类似的事情? 处理此类情况的最佳做法是什么。
最佳答案
默认情况下,单个 try-catch block 就足够了,不需要在其中嵌套其他 try-catch 。但是,这些规则可能存在一些合法的异常(exception)情况。
异常 1:同一异常的不同处理程序
让我们考虑以下示例
try {
myroutine(); // may throw three types of exceptions
} catch (e) {
if (e instanceof TypeError) {
// statements to handle TypeError exceptions
} else if (e instanceof RangeError) {
// statements to handle RangeError exceptions
} else if (e instanceof EvalError) {
// statements to handle EvalError exceptions
} else {
// statements to handle any unspecified exceptions
logMyErrors(e); // pass exception object to error handler
}
}
完全有可能在您的 try
内部有一个部分,其中给定的错误类型(例如 RangeError
)需要与主 不同的处理方式捕获
。在这种情况下,在 try 中添加另一个 try-catch 可能是有意义的,尽管在这种情况下,为了更好的可读性,将内部 try 视为一种方法并调用它是有意义的,因此您不会在物理上嵌套 try -catch block ,但将 try-catch 的关注点分离到单独的方法中。
异常2:仅在try block 的一部分处理某种类型的错误
您很可能希望 try-catch 在 try
block 的大部分中进一步抛出错误,但是,在特定部分中您希望它处理它。同样,在这种情况下,将内部 try
分离到它自己的方法中是有意义的。
结论
嵌套的 try-catch 对于读者来说是不直观的,因此每当您遇到嵌套 try 的需要时,将内部 try
分离到它自己的方法中是有意义的。然而,正如上面的例子所示,有合理的需要偏离某些部分的错误的外部处理。但是,默认情况下,最好将这些部分视为值得与方法分离的单独关注点。当然,有时您可能希望保留嵌套的 try-catch 而不分离它们的关注点,但通常值得应用分离。因此,您可能需要考虑的一条经验法则是将嵌套的 try-catch 重构为单独的方法或单个 try-catch,除非有充分的理由不这样做。
关于javascript - 在 try block 中使用 try 来捕获不同的错误是一个好习惯吗? - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73533145/