Javascript:拒绝成功的承诺

Javascript:拒绝成功的承诺,javascript,Javascript,有时我发现自己正在编写以下代码: if (result.status == 200) { return result.json() } else { return result.json().then(res => Promise.reject(res)) } 如果状态不是200,那么结果将包含一条我想返回的错误消息。(这是api.js脚本的一部分) 有没有更好的方法来“反转”.json()承诺 我想可能是这样的: 返回承诺.拒绝(result.json) 我有办法做那样

有时我发现自己正在编写以下代码:

if (result.status == 200) {
    return result.json()
} else {
    return result.json().then(res => Promise.reject(res))
}
如果状态不是200,那么结果将包含一条我想返回的错误消息。(这是api.js脚本的一部分)

有没有更好的方法来“反转”.json()承诺

我想可能是这样的:

返回承诺.拒绝(result.json)


我有办法做那样的事吗?我希望result.json的成功结果是catch路由中的错误对象。

这看起来有点奇怪,我会采用这种方法

return result.json().then(json => {
   if (result.status === 200) {
      return json;
   }

   throw new Error(`Failed with ${json}`);
});
  • 您应该始终抛出/返回包含错误对象的被拒绝承诺。一些模块甚至依赖于这一点,并且可以在抛出非错误对象时表现得出人意料
  • 我认为抛出错误比返回的东西表现为抛出错误更“明显”
  • 如果其他因素增加了复杂性。如果没有必要,请移除其他
  • 最好习惯
    ==
    ,使用
    ==
    会带来一些问题
就我而言,我更喜欢这个承诺


信息:

如果
result
始终是JSON,为什么不先处理它,然后拒绝承诺?“有没有办法让我这样做?”你试过这样做吗?怎么会这样?结果是什么?是的,因为promise.reject返回的是已解决的承诺,所以该承诺似乎无论如何都会解决。我这样测试它:const test=()=>Promise.reject(()=>Promise.resolve(“yay”))我想你的意思是
返回json。这很有意义,我将使用这种方法。我看到返回错误对象的问题是,我已经在服务器端构建了一个“错误”对象。它只是一个json对象,但它包含消息和代码。我当然不应该发送一个实际的错误对象?这使得我在发生错误时只返回结果json,因为它包含了所需的所有信息。关于==vs==我知道这一区别,我通常只是不确定我使用的获取库是否返回字符串或数字作为状态码。我认为在这种情况下使用它是安全的==@ThatBrianDude不,如果它符合规范,它将是一个整数。虽然你是正确的,在这种情况下它是安全的,但它不值得从短绒的噪音。伟大的是知道有一个规格。注意。但是,您可能仍然希望编辑返回值;)@ThatBrianDude-如果你抛出一个错误,你应该返回一个错误。您可以使用自定义错误,但它们应该扩展错误类。另外,您不应该使用返回拒绝承诺作为以不同方式返回值的变通方法。它与抛出错误相同,应作为错误处理。如果您希望将其作为非错误标准业务逻辑的一部分进行处理,那么应该返回类似于
{valid:true,json:'…'}
return result.json().then(res=>{
  if(result.state!==200) return Promise.reject(res);
  return res;
});