我正在向 Predicthq API 发出请求
app.get("/test", (req, res) => {
// [0] IS THE LONGITUDE
request.get("https://api.predicthq.com/v1/events/?q=Minnesota&limit=10", {
headers
}, (err, data) => {
var results = JSON.parse(data.body).results;
var serverRes = [];
for (var i in results) {
getGeo(results[i].location[1], results[i].location[0]).then(v => {
serverRes[i] = v;
})
} //end of for loop
res.send(serverRes)
}); // end of request call
}); //end of GET CALL
//ASYNC FUNCTIOON
function getGeo(lat, long) {
return new Promise(resolve => {
geocoder.reverse({
lat: lat,
lon: long
}, function(err, res) {
resolve(res)
});
});
}
$(document).ready(function() {
$("button").on("click", () => {
console.log("Button Clicked");
$.get("/test", function(data, status){
console.log("data", data)
});
});//end of button clicked
});
获取事件列表。当我收到响应时,我想将响应的经纬度转换为地址并将其放入数组变量中。当我收到服务器的响应时,它会给我一个空数组列表,如何让 for 循环等待,直到 geocoder.reverse 获取数据,然后继续处理其他纬度、经度
最佳答案
使用 for
循环将这些 Promise 放入数组中,然后使用 Promise.all
等待它们解析。
var results = JSON.parse(data.body).results;
var geoPromises = [];
for (var i in results) {
var promise = getGeo(results[i].location[1], results[i].location[0]);
geoPromises.push(promise);
}
Promise.all(geoPromises).then(vs => {
res.send(vs);
});
关于javascript - 如何使 for 循环等待异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49329745/