一段代码:
// file defined here.
return getFile.then(function _gotFile(file) { // getFile is a promise, resolved OR rejected
// A
// do something on file
return file;
})
.catch(function() {
// B
// do other things on file,
return file;
})
在上面的代码中,我使用promise catch
来控制程序流程:如果getFile
promise 已解决,则执行A
,否则, 执行 B
。
这样写代码是好的做法吗?
如何重写上面的代码来避免这种情况?谢谢
最佳答案
If
getFile
promise resolved, do A, otherwise, do B.
实际上,没有。当 A 失败时,它也会执行 B。如果你真的想要“否则”,那么你need to use .then(…, …)
instead of .then(…).catch(…)
.另见 Correct Try...Catch Syntax Using Async/Await .
Is it good practice to write codes like this?
是的,也不是。这取决于。
在异常情况下做出控制流决策是完全正常的。如果出现故障,处理错误绝对是一个好习惯。
另一方面,您可能会过度使用异常。有时通过 fulfillment case 返回一个 bool 值或结果类型枚举或类似的东西,并使用 if
/else
来区分它,可以简单得多。
此外,当您使用异常(exception)/拒绝时,您需要小心并正确使用它们。 JS只有catch
-all,没有条件异常,手动做很麻烦。尽管如此,只捕获您实际可以处理的特定类型的错误并重新抛出其他错误通常是一种很好的做法。看看here举个例子。
关于javascript - 如何避免使用promise catch来控制程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49159198/