无需尝试/捕获即可获取和异步/等待

时间:2019-10-24 03:21:34

标签: javascript async-await fetch

我正在尝试让异步等待而无需尝试/捕获

  return await fetch(url, options)
    .then(res => res.json())
    .catch(err => {
      throw new Error(err)
    })

这是我拨打电话的方式:

    const response = await makeApiRequest('/reset', {
        password: password1,
        code
    }, {
        noauth: true
    }).catch(err => {
        debugger;
        msg = err.message;
    });

    if (response) {
        navigateTo('/');
    }

问题是所有catch块均不起作用。该代码已过期并提供401服务。

2 个答案:

答案 0 :(得分:0)

仅当提取API无法发出请求时,该API才会失败。如果可以的话,即使状态为不良,提取也会成功执行。

由于从未调用过throw new Error(err),因此仅当您尝试将invalid string content解析为json对象(res.json())时才被调用。我来了,在401的情况下,您的服务器返回了一个有效的json字符串,例如{message: "Unauthorized"},然后res.json()正常工作,并且没有引发任何错误。

如果您想捕获http错误,那么http status code对象的res是正确的方法:

  return await fetch(url, options)
    .then(res => {
      if (res.status >= 300) { // error http status code range
        throw new Error(res.status) // throw a error to the catch block
      }
      return res.json();
    })
    .catch(err => {
      throw new Error(err) // catch and throw to the error of previous `.then` block
    })

然后重试。

答案 1 :(得分:0)

这就是我要工作的:

{% load xxxxx %}

您可以这样称呼它:

{% load xxxxx %}