他们是正确的。
调用
myCustomFunction假定始终都会返回一个承诺(
.then并分别
.catch处理已解决和拒绝的承诺)。当您引发错误时,该函数不会返回promise。
您 可以 使用它来捕获错误:
try { myModule.myCustomFunction(someInput).then(result => { // carry on }) .catch(err => { // do something with the error })} catch(err) { ...}但正如您所看到的,这将导致两个错误处理程序:
try/catch同步引发的错误,以及可能返回的
.catch任何被拒绝的承诺
sns.createTopic(someParams)。
这就是为什么最好使用
Promise.reject():
module.exports.myCustomFunction = input => { if (badInput) { return Promise.reject('failed'); } return sns.createTopic(someParams).promise()}然后,
.catch将捕获两种类型的错误/拒绝。
注意:对于较新版本的Node.js(我认为v7.6及更高版本),以下内容也将起作用:
module.exports.myCustomFunction = async input => { if (badInput) { throw new Error('failed'); } return sns.createTopic(someParams).promise()}这里的关键是
async关键字。通过使用此关键字,函数结果将自动由Promise包装(类似于@peteb的答案所示)。



