Javascript Promise.reject()的替代方法来处理非错误消息
我发现用Promise抛出错误是很舒服的。reject('text reason')跳过以下所有内容。然后(),并向用户提供正确的错误消息 如果出现真正的错误,则不会抛出这些拒绝-例如,如果用户想要更改is用户名,我使用它们跳过thens-如果用户名已被占用,则拒绝立即给他返回消息的承诺 我发现这是一种不好的做法,你有没有替代我的方法 简短代码示例:Javascript Promise.reject()的替代方法来处理非错误消息,javascript,es6-promise,Javascript,Es6 Promise,我发现用Promise抛出错误是很舒服的。reject('text reason')跳过以下所有内容。然后(),并向用户提供正确的错误消息 如果出现真正的错误,则不会抛出这些拒绝-例如,如果用户想要更改is用户名,我使用它们跳过thens-如果用户名已被占用,则拒绝立即给他返回消息的承诺 我发现这是一种不好的做法,你有没有替代我的方法 简短代码示例: isBlacklisted ? Promise.reject('blacklisted') : [more stuff...]
isBlacklisted
? Promise.reject('blacklisted')
: [more stuff...]
.catch(err => switch(err){
case 'blacklisted':
req.flash('error', t('blacklisted'))
})
编辑:我不想抛出一个真正的错误,因为它会向stacktrace发送垃圾邮件
编辑:我的示例工作正常,但它总是抛出类似以下消息:“(节点:15764)警告:承诺被拒绝,但出现非错误:[对象字符串]”
编辑:我成功地通过以下方式关闭了警告:
Promise.config({
warnings: false,
})
但我认为这仍然是一种不好的做法。你能给我解释一下为什么这是一种不好的做法,还有什么更可取
谢谢。您是否考虑过使用
async/await
?它将需要节点v7或更高版本,但它将允许更好的控制流,而不必求助于“快捷方式”,如抛出异常以打破承诺链。可能使用:promise.reject(新错误('errorMsg'))
修复警告。现在,在switch语句中,您可以控制错误消息:switch(err.message).
@robertklep您能进一步解释一下优势在哪里吗?@JoseHermosillaRodrigo这会导致整个错误的console.log-我已经成功关闭了警告(我会在问题中添加代码)但我认为这仍然是一种不好的做法,呃,如果您不想在控制流中使用异常(并且有很好的理由不这样做),那么就使用带有if
语句的分支?