javascript - 如何按照发送请求的顺序将获取响应数据分配给数组

标签 javascript arrays rest request response

我在 for 循环中有一个rest.get 请求,该请求发送大约 20 个查询(基于每次更改查询的先前请求的数据)。我的问题是,它似乎完全运行了 for 循环,然后查询异步运行,并以最快而不是连续返回的数据进行响应。如果我在 .end 函数内 console.log forloop 的索引,则在 forloop 完成之前它是未定义的,然后它就是最终的数字(即使它全部在 for 循环内)。我试图按照发送请求的相同顺序保存(推送到数组)数据,这样我就可以将数据与我打印出来的先前获取响应列表进行匹配。有没有办法按照我发送请求的顺序将我的响应数据分配给数组,而不是先到先服务?

// this function is being called inside the previous query 
function carData(req, res) {

  var carNameJson = [];
  var resultToJson = [];

  //singleCars.length is defined in a previous query and is an array of car IDs
  for (var index = 0; index < singleCars.length; ++index) {
    //Grab each individual car ID and concatinate it into a Query
    var carNames = singleCars[index];
    var carQuery = "https://queryinfo";
    var finalSingleQuery = "carQuery + carNames";

    // puts the data into an array of JSON objects
    carNameJson = {
      carID: carNames
    };

    // result is a global variable assigned as an empty array
    // it list all the car IDs in a JSON format
    result.push(carNameJson);

    rest
      .get(finalSingleQuery)
      .proxy("http://proxyinfo")
      .end(function(resp) {
        resultToJson = {
          carInfo: resp.body
        };
     // resultInfo is a global variable assigned as an empty array
        resultInfo.push(resultToJson);
        return resultToJson;
      });
  }
}

这段代码一切正常,但它给我的数据是乱序的,所以我无法将汽车信息与汽车 ID 列表相匹配。我是节点新手,所以我可能做错了。任何帮助将不胜感激!

最佳答案

您可以使用索引变量来确定存储响应的位置。为此,您必须确保 index 变量是 for 主体的本地变量,您可以使用 let (而不是 var ):

for (let index = 0; index < singleCars.length; ++index) {

    // ...

    // store directly at the correct index:
    resultInfo[index] = resultToJson;

您可能还想知道何时获得所有结果。您可以在分配给resultInfo[index]之后使用此条件来执行此操作:

    if (resultInfo.filter(Object).length === singleCars.length) {
        // maybe call a callback here.
    }

关于javascript - 如何按照发送请求的顺序将获取响应数据分配给数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45288075/

相关文章:

javascript - 午夜关门 - 工作时间

javascript - 在元素之间画线

javascript - typescript :使用联合类型映射对象值无法按预期工作

javascript - ckeditor拖放txt文件

PHP:将MySQL结果排序为多维数组

javascript - 访问对象内多维数组内的对象元素

javascript - 如何使用 JavaScript 对包含数据的日期数组进行排序?

java - 如何在包含 3 个 war 文件的 Eclipse 中调试应用程序?

rest - Protractor - 测试休息终点

java - Tomcat 中的 REST API 客户端返回 ConnectionTimedOut