javascript - 如何避免使用promise catch来控制程序?

标签 javascript promise angular-promise

一段代码:

// 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/

相关文章:

javascript - 私有(private)属性(property)/公共(public) setter/getter - javascript

javascript - 多个 notLike 不起作用

javascript - 使用 javascript 更改表格内段落内容时出现问题

javascript - 工厂内 AngularJS promise 的问题

angularjs - 如何使用 Jasmine 模拟链式 promise ?

设置后 JavaScript 调用 init 函数

javascript - promise 提高 Nodejs 的可读性

javascript - jQuery - 防止通过 ajax 后验证提交内部 promise

javascript - 稍后如何访问 promise 结果?

javascript - 如何访问 promise `.then` 方法之外的变量?