【问题标题】:async fetch in function函数中的异步获取
【发布时间】:2018-07-14 02:33:56
【问题描述】:

我正在尝试创建一个函数,该函数使用 fetch 向我的 API 发送请求并等待结果 - 如果它返回数据,我希望该函数返回 true,否则返回 false

const loggedIn = async () => {
  const response = await fetch(ENDPOINT_URL, {
    method: "POST",
    credentials: "include",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      query: query,
    })
  })
  const json = await response.json()

  // data gets logged
  console.log(json.data)

  if(json.data) {
    return true
  } else {
    return false
  }
}

如果我拨打loggedIn(),我仍然会收到Promise {<pending>}

【问题讨论】:

  • 是的,因为它是一个异步函数,它返回一个承诺。你试过const isLoggedIn = await loggedIn()吗?或者只是使用一个承诺then

标签: javascript async-await fetch


【解决方案1】:

async 函数返回一个承诺。从调用者的角度来看,它与任何其他返回承诺的函数没有什么不同。当您调用它时,您会得到一个需要处理的承诺,而不是值,因为这需要阻塞。

听起来您希望它会阻止您的代码。为此,请从另一个 async 函数调用它:

(async () => {
  try {
    console.log(await loggedIn()); // true or false
  } catch (e) {
    console.log(e);
  }
})();

【讨论】:

  • 谢谢,我对异步 JS 很陌生。我基本上需要等待获取响应,因为我会使用这个函数来决定用户是否经过身份验证才能看到某些东西。我将如何将其保存在变量/函数中? (所以我可以将它与这样的三元运算符一起使用:loggedIn() ? render() : redirect()
  • const isLoggedIn = await loggedIn(); isLoggedIn? render() : redirect() 或只是await loggedIn() ? render() : redirect()
猜你喜欢
  • 1970-01-01
  • 2019-04-25
  • 2018-11-18
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 2021-08-27
相关资源
最近更新 更多