是应该拒绝承诺错误或字符串?

Kar*_*lek 19 javascript promise

我正在编写一个在Javascript中大量使用类似ECMAScript 6的承诺的代码.

我无法决定,如果用字符串或错误拒绝承诺更"正确",因为我已经看到使用了这两种模式.

也就是说,如果最好打电话

return new Promise(response, reject) {
    reject("Sky is falling.");
}
Run Code Online (Sandbox Code Playgroud)

要么

return new Promise(response, reject) {
    reject(new Error("Sky is falling."));
}
Run Code Online (Sandbox Code Playgroud)

bva*_*ghn 15

查看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
});
Run Code Online (Sandbox Code Playgroud)

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

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

  • 现在版本的Mozilla文档中缺少"测试静态拒绝"部分.只有"错误"对象拒绝. (3认同)