【问题标题】:Can't assign API data from fetch to variable in function无法将 API 数据从 fetch 分配给函数中的变量
【发布时间】:2021-04-29 09:54:06
【问题描述】:

我有一个 JS 模块,它是一个从我们公司 Github 获取问题数据的函数,然后我想将其分配给一个变量:

import { request } from "https://cdn.skypack.dev/@octokit/request";

let issueData

async function getIssues() {
    const issueAPI = await request("GET repos/{owner}/{repo}/issues", {
        baseUrl: "https://company.com/api/v3/",
        owner: "me",
        repo: "exampleRepo",
    });

    window.issueData = issueAPI.data
    return issueAPI.data
}

export { getIssues, issueData }

我似乎无法将issueAPI.data 分配给我的变量issueData?这里出了什么问题?我觉得这与 promises/async 或范围有关,但无法解决。

【问题讨论】:

  • 您不需要为此使用外部库。您可以直接await fetch(url, options)
  • 将库用于不止一个功能!

标签: javascript variable-assignment es6-modules


【解决方案1】:

您将issueAPI.data 分配给名为issueData 的窗口变量,这与您在sn-p 上使用let 定义的变量不同。如果你想分配给你声明的变量,你只需要这样做。

let issueData = await getIssues()

如果函数中没有其他错误,这应该正确地将您想要的内容分配给声明的变量。

您也可以删除window.issueData = issueAPI.data,除非您真的想从窗口对象中访问它。

编辑:正如 Jeremy 指出的那样,这需要顶级等待。 Jeremy 还提供了一种解决方法:

let issueData
( async () => { issueData = await getIssues() })()

【讨论】:

  • 很好的答案,虽然它需要能够在顶级(async 函数之外)await,这是一个最近的功能(我相信节点 14.3,我不知道浏览器)
  • 所以当我这样做时,我收到错误“意外的保留字”?!
  • 这可能与杰里米的评论有关。我添加了另一个解决方案。
  • @eloyra 您的编辑破坏了您的解决方案。使用.then() 将导致exportissueData 定义之前发生。您必须改为创建一个自执行异步函数let issueData; ( async () => { issueData = await getIssues() })();
  • @eloyra 随时使用我的解决方案编辑您的答案。然后 OP 可以将其标记为已接受。团队合作:)
猜你喜欢
  • 2023-02-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多