【问题标题】:Should Promise be rejected with Error or string? [duplicate]Promise 应该被错误或字符串拒绝吗? [复制]
【发布时间】:2015-06-02 19:56:44
【问题描述】:

我正在编写一个在 JavaScript 中大量使用类似 ECMAScript 6 的 Promise 的代码。

我无法决定,用字符串还是错误拒绝承诺是否更“正确”,因为我已经看到这两种模式都在使用。

也就是说,如果打电话比较好

return new Promise(response, reject) {
    reject("Sky is falling.");
}

return new Promise(response, reject) {
    reject(new Error("Sky is falling."));
}

【问题讨论】:

  • 两者都有效。重要的是拒绝一个有意义的 Promise。
  • 我希望我的小例子只是为了说明而不是真正的代码是可以理解的:)
  • Error 更好,因为这样你会得到一个关于错误所在位置的堆栈跟踪。
  • ESLint 的意见是Error 是首选:eslint.org/docs/rules/prefer-promise-reject-errors

标签: javascript promise


【解决方案1】:

查看 Mozilla 的文档很有帮助:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject

Promise.reject("Testing static reject").then(function(reason) {
  // not called
}, function(reason) {
  console.log(reason); // "Testing static reject"
});

Promise.reject(new Error("fail")).then(function(error) {
  // not called
}, function(error) {
  console.log(error); // Stacktrace
});

它将字符串和错误都显示为拒绝的有效“原因”。主要的(我认为)是“原因”应该是有意义的。

如果堆栈跟踪有用,那么提供错误可能会更好。如果只需要一个简单的字符串就足够了。

【讨论】:

  • 当前版本的 Mozilla 文档中缺少 Testing static reject 部分。只有Error 对象被拒绝。
猜你喜欢
  • 2020-06-09
  • 2017-03-02
  • 2020-08-30
  • 1970-01-01
  • 2019-10-28
  • 2017-04-16
  • 2018-04-14
  • 2021-04-21
  • 1970-01-01
相关资源
最近更新 更多