我对 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 函数之前声明它。)
您没有使用函数的返回值:
await collectWorks();
如果您希望返回值位于名为
worksData
的变量中(或者实际上称为任何东西),请将该值存储在变量中:
let worksData = await collectWorks();
(完全,正如您在
response
函数中对 worksData
和 collectWorks
所做的那样。)
当我去掉worksData前面的const时,它工作得很好,我确实得到了我需要的结果
因为没有变量声明(只有赋值),它是一个“隐式全局”。基本上它成为 window
对象的属性。一般情况下最好避免哪种情况。