使用fetch,如何正确处理拒绝

时间:2017-08-28 05:25:24

标签: javascript node.js es6-promise fetch-api

我有以下来自mern.io堆栈的函数。

export default function callApi(endpoint, method = 'get', body) {
  return fetch(`${API_URL}/${endpoint}`, {
    headers: { 'content-type': 'application/json' },
    method,
    body: JSON.stringify(body),
  })
  .then(response => response.json().then(json => ({ json, response })))
  .then(({ json, response }) => {
    if (!response.ok) {
      return Promise.reject(json);
    }
    return json;
  })
  .then(
    response => response,
    error => error
  );
}

我按以下方式调用该函数

callApi('auth/register', 'post', {
      username,
      password,
}).then(function(res) {
    // do stuff
});

响应将是201或422.如何以正确的方式处理422?如果用户名已存在,则会出现422。

我是否将所有逻辑放在第一个逻辑中,如下所示:

callApi('auth/register', 'post', {
      username,
      password,
}).then(function(res) {
    if (res.error) {

    } else {
    }
});

1 个答案:

答案 0 :(得分:1)

假设callApi返回一个Promise对象:

callApi('auth/register', 'post', {
      username,
      password,
}).then(function(res) {
    // res
}).catch(function(err) {
    // handle err
});

有关详细信息:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise