API 获取函数中的数据变量在声明时不起作用

问题描述 投票:0回答:1

我对 js 非常陌生,我已经必须使用 API 并使用 async/await 所以我知道可能有些东西我在这里不明白...

这是我的代码:

async function collectWorks() {
    const response = await fetch ("http://localhost:5876/api/works");
    const worksData = await response.json();
    return worksData
}

async function testfunction() {
    await collectWorks();
    let test = worksData[1].title;
    console.log(test)
}
testfunction()

这是我的问题:我有异步函数来获取我的 API。我应该在我的constworksData中获取数据,对吗?但是当我尝试在我的 testfunction 中使用它时,它不起作用,我在控制台中得到了这个:

未捕获(承诺中)ReferenceError:worksData 未在 testfunction 处定义

但是,这就是我不明白的,当我去掉worksData前面的const时,它工作得很好,我确实得到了我需要的结果......我错过了什么?难道我不应该声明吗?

(我实际上注意到了这一点,因为一开始我忘记添加 const 并继续我的项目,因为它工作得很好。当我注意到时,我尝试将它添加回来,但它破坏了一切。我最终重新开始,因为我认为休息代码可能会弄乱它,但现在我什至无法开始,因为我遇到了这个问题......我也尝试在 fetch 函数之前声明它。)

javascript async-await fetch-api
1个回答
1
投票

您没有使用函数的返回值:

await collectWorks();

如果您希望返回值位于名为

worksData
的变量中(或者实际上称为任何东西),请将该值存储在变量中:

let worksData = await collectWorks();

完全,正如您在

response
函数中对
worksData
collectWorks
所做的那样。)


当我去掉worksData前面的const时,它工作得很好,我确实得到了我需要的结果

因为没有变量声明(只有赋值),它是一个“隐式全局”。基本上它成为 window 对象的属性。一般情况下最好避免哪种情况。

    

© www.soinside.com 2019 - 2024. All rights reserved.