javascript - 如何在javascript中修复无序的“获取”
问题描述
我正在使用 for 循环获取多条路线并保存其结果这是我的代码
for (let i = 0; i < datesToFetch.length; i++) {
fetch("http://localhost:3000/areaChart/"+datesToFetch[i]+"/"+datesToFetch[i+1])
.then(response => response.json())
.then(response => console.log(response))
}
真的很奇怪,我得到的数据顺序是随机顺序,它不是根据 for 循环升序顺序来的,这在这种情况下非常重要
我应该怎么做才能以正确的顺序获取数据?
解决方案
发生了什么,以及如何解决它:
您的代码正在排队一堆fetch
es,但在继续循环的下一次迭代之前没有等待它们完成。他们可以按任何顺序完成。
相反,如果您希望循环每次都停止并等待,请将其包装在一个async
函数中,然后await
获取。
async function test() {
for (let i = 0; i < datesToFetch.length; i++) {
var response = await fetch("http://localhost:3000/areaChart/"+datesToFetch[i]+"/"+datesToFetch[i+1]);
var responseJson = await response.json();
console.log(responseJson);
}
}
模拟您的代码:
const delay = t => new Promise(resolve => setTimeout(resolve, t));
async function test() {
for (let i = 1; i <= 5; i++) {
console.log(`Starting call #${i}`);
delay(5000 - (i * 1000))
.then(() => console.log(`Call #${i} has completed.`));
}
}
test();
上面提供的解决方案的模拟:
const delay = t => new Promise(resolve => setTimeout(resolve, t));
async function test() {
for (let i = 1; i <= 5; i++) {
console.log(`Starting call #${i}`);
await delay(5000 - (i * 1000));
console.log(`Call #${i} has completed.`);
}
}
test();
推荐阅读
- javascript - 如何通过 URL 参数应用 CSS?按 URL 隐藏 div
- javascript - 使用减速器函数时无法读取未定义的属性“conversationId”
- javascript - Javascript:如何在不更改引用的情况下修改数组中的每个元素
- ruby-on-rails - 安装 rails 5.0 时出现 nio4r 错误
- python - 我不知道如何执行这个 Python 脚本(程序)
- java - 使用 java 访问 Azure 数据湖
- python - 如何在网站 (HTMl) 上包含 python 代码?
- python - 使用海象运算符的意外 Python 变量范围:= 赋值表达式
- java - 如何使用 Java 检查正则表达式中的多个 [args]?
- ssl - Disable select a certificate for authentication 在 IIS 和 Next JS 上弹出