【问题标题】:Understanding promse.reject() and how to pass object as parameter [duplicate]了解 promse.reject() 以及如何将对象作为参数传递[重复]
【发布时间】:2018-09-09 13:24:03
【问题描述】:

我在 Promise.reject() 中传递 response.json 以便它在 catch 中可用。 然而,在捕获中它是未定义的。

const checkResponse = (response) => {
  if (response.status >= 200 && response.status < 300) {
      return response.json();
    }
    else{
    return Promise.reject(response.status,response.json());
  }
}

下面是catch块

.catch((status,resp) => {
        console.log('Request failed', status, resp);
      });

resp in catch 显示为“未定义”

【问题讨论】:

  • 首先,Promise.reject 只接受一个参数。
  • 这是一个错误

标签: javascript node.js


【解决方案1】:

reject 只接受 一个 参数。如果要传递多条数据,则需要将它们捆绑在(例如)一个对象中。

var p = new Promise(
  (res, rej) => rej({
    status: "status",
    data: {
      some: "object"
    }
  })
);
p.catch(reason => console.log("Rejected", reason.status, reason.data));

【讨论】:

    【解决方案2】:

    .reject(和.resolve)只接受一个参数。您可以将其作为对象传递:

    return Promise.reject({ status: response.status, body: response.json() });
    

    也使用return response.json(); 似乎不一致。如果它返回一个承诺,那么你不能在Promise.reject 中使用它,因为你会得到承诺而不是正文。如果它没有返回一个 Promise,那么你只是返回一个失败条件的 Promise。

    【讨论】:

    • 是的,它确实返回了一个承诺。您构造的对象并没有比直接使用 response 拒绝更有帮助。
    • 没错,你可以这样做Promise.reject(response)
    • 应该只接受一个错误对象。不像Promise.resolve 可以接受任何东西。
    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 2019-10-19
    • 2014-06-07
    • 1970-01-01
    • 2015-03-04
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多