Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Promise.reject()的替代方法来处理非错误消息_Javascript_Es6 Promise - Fatal编程技术网

Javascript Promise.reject()的替代方法来处理非错误消息

Javascript Promise.reject()的替代方法来处理非错误消息,javascript,es6-promise,Javascript,Es6 Promise,我发现用Promise抛出错误是很舒服的。reject('text reason')跳过以下所有内容。然后(),并向用户提供正确的错误消息 如果出现真正的错误,则不会抛出这些拒绝-例如,如果用户想要更改is用户名,我使用它们跳过thens-如果用户名已被占用,则拒绝立即给他返回消息的承诺 我发现这是一种不好的做法,你有没有替代我的方法 简短代码示例: isBlacklisted ? Promise.reject('blacklisted') : [more stuff...]

我发现用Promise抛出错误是很舒服的。reject('text reason')跳过以下所有内容。然后(),并向用户提供正确的错误消息

如果出现真正的错误,则不会抛出这些拒绝-例如,如果用户想要更改is用户名,我使用它们跳过thens-如果用户名已被占用,则拒绝立即给他返回消息的承诺

我发现这是一种不好的做法,你有没有替代我的方法

简短代码示例:

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
语句的分支?