Promise 应该被 Error 还是 string 拒绝?

Should Promise be rejected with Error or string?

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

我无法决定,是 "correct" 拒绝带有字符串的 promise 还是带有错误的 promise,因为我已经看到这两种模式都被使用了。

也就是如果打电话比较好

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

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

查看 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
});

它显示字符串和错误都是有效的 "reasons" 拒绝。最主要的(我认为)是 "reason" 应该是有意义的。

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