【问题标题】:Async/await inside of Promise then [duplicate]然后在 Promise 中异步/等待 [重复]
【发布时间】:2020-01-27 05:04:09
【问题描述】:

我有一个 400 返回一个包含我需要解决的错误的正文。但是,由于fetch 实际上并没有使该状态代码失败,我在then 中处理它并返回一个被拒绝的Promise。但是,因为then 通常会返回Promise,所以我不能在不等待json() 的响应的情况下发出reject

dispatch({
  type: 'LOGIN',
  payload: fetch(`${host}/api/signin/`, {
    method: 'POST',
    body: data
  }).then(async res => {
    if (res.status >= 400) {
      return Promise.reject(await res.json());
    }

    return await res.json();
  })
});

有没有更好的方法来处理这个问题?它在技术上是可行的,但我觉得我可能通过使then 同步来处理它是错误的。

【问题讨论】:

  • 就个人而言,我喜欢你的做法。
  • 正常的过程是使用两个 .then 的,但我认为使用 async/await 组合它们没有真正的问题。
  • 我在我的库中创建了一个函数,它用我自己的异步函数包装了 fetch,我在该函数中等待 fetch 本身,以完全避免 then
  • 为什么要拒​​绝>400?
  • 我会推荐给avoid mixing await with .then(…) syntaxavoid return await。还可以考虑使用response.ok 而不是.status 检查。

标签: javascript reactjs async-await


【解决方案1】:

我觉得我在这里遗漏了一些东西,但你不能只是控制台记录拒绝吗?

somepromise.then(
  res => { ... },
  err => { console.log(err)}
)

【讨论】:

  • 你不是在err之前错过了,
  • fetch 不会在 reject400
  • 感谢@AbishekAditya
猜你喜欢
  • 2019-02-06
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 2021-08-23
  • 1970-01-01
  • 2019-06-29
相关资源
最近更新 更多