gpt4 book ai didi

javascript - 我的 For 循环太快,我错过了获取关键数据的机会

转载 作者:行者123 更新时间:2023-11-28 14:44:12 26 4
gpt4 key购买 nike

我用来获取 JSON 数据的 API 只允许您输入单个日期,并且它们没有任何获取多个日期的方法。因此,我决定创建一个 for 循环来循环某些日期,以获取我需要的所有 json 数据。问题是,循环不会等待json文件返回数据,所以即使我得到了一些数据,但我没有得到所有数据。更糟糕的是,有些日期返回的速度很慢,因此它们甚至没有以正确的顺序插入数组。它只是以某种随机的方式将它们插入其中。如何告诉循环“等待”直到获得数据,直到再次循环?

jsonDataArray = [];
for (var k = 10; k < 20; k++){
var num = k;
var n = num.toString();
var mydate = "2017-02-"+n;
d3.json("http://api.fixer.io/"+mydate, function (jsonData) {
jsonDataArray.push(jsonData);
}
)}

最佳答案

JavaScript 中的 I/O 是非阻塞的,因此循环完成后,数据将在回调处理程序中返回。

您可以从循环中返回 Promise 数组,然后使用 Promise.all。想法如下:

results = [];
for (var k = 10; k < 20; k++){
var num = k;
var n = num.toString();
var mydate = "2017-02-"+n;
results.push(new Promise(function(resolve, reject) {
d3.json("http://api.fixer.io/"+mydate, function (jsonData) {
resolve(jsonData);
}}));
)}

Promise.all(results).then(function (jsonArray) {
... work on the jsonArray
}

关于javascript - 我的 For 循环太快,我错过了获取关键数据的机会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47062526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com