【发布时间】:2021-09-29 05:02:53
【问题描述】:
我正在尝试使用 async await 依次获取数据并将 response.json 推送到数组中。但是,我在下面使用的代码不会在console.log(b); 中显示结果。有谁知道是什么问题?
提前谢谢你!
async function fetch_data(){
let b = [];
for (let i = 1; i < 10; i++) {
let response = await fetch('https://SOME_URL/' + i, {
method: "GET",
headers: {"Key": "123456"}})
if (!response.ok) {
var error_detail = `An error has occured: ${response.status}`;
throw new Error(error_detail);
}
var data = await response.json();
// await b.push(data);
b.push(data);
}
// await Promise.all(b).then(function (b) {
// console.log(b)})
console.log(b);
return b;
}
当我运行脚本时,它不会在控制台中返回任何内容
fetch_data().catch(error => {
error.error_detail;
});
更新:似乎使用下面的答案解决了。不知道为什么。
console.log(b); 不显示输出的问题是因为例如'https://SOME_URL/' + i 随着i 增加,如果当i = 5 返回错误,那么console.log(b); 将不会返回任何内容。如果我设置了i < 5,那么console.log(b); 将返回输出b。所以这意味着如果循环中的任何 fetch 在i 的限制内返回错误,那么推送将不起作用(b 将为空),因此console.log(b); 将不会返回任何内容。
有人知道如何解决这个问题吗?
【问题讨论】:
-
将函数重命名为其他名称(例如_fetch)
-
我认为你不需要等待
b.push(data)。这只是一个数组推送。 -
我修改了它,它仍然没有返回任何东西。
-
您的代码对我来说可以正常工作。我使用
https://jsonplaceholder.typicode.com/todos/1进行测试。
标签: javascript loops async-await fetch fetch-api