javascript - 如何使 for 循环等待异步函数

标签 javascript node.js asynchronous

我正在向 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/

相关文章:

node.js - Sequelize - 尝试使用 'include' 获取相关对象的belongsToMany 关系

java - 在带有 void 返回类型的目标方法上的 Spring AOP 会跳过代码执行

javascript - 水平菜单子(monad)菜单

javascript - 输入无效字符时JavaScript返回错误消息

javascript - node-fetch 接收空主体

javascript - Handlebars.registerHelper 是否支持异步函数?

javascript - 为什么对 IDBObjectStore.get() 的调用会导致混淆行为?

javascript - 为什么服务器端和客户端脚本不能交互?

javascript - 如何更改输入名称背景?

javascript - JS vs JSON 用于 Node js 中的配置