【问题标题】:Array been cleared数组被清除
【发布时间】:2017-08-01 11:56:12
【问题描述】:

所以我有这段代码可以将数据添加到每秒运行的数组中:

          var vehiclesT = asset.assetIDs;
          if(!asset.assetIDs){
            vehiclesT = [];
          }
          var y;
          var vehicles = [];
          for(y=0; y< vehiclesT.length; y++){
            var url = 'api/assetName/?vid='+vehiclesT[y]+'&id='+id;
            fetch(url, {credentials: 'include', method: 'get'}).then(function(body){
              return body.text();
            }).then(function(data) {
              vehicles.push(data);
              console.log(vehicles);
            });
          }
          console.log(vehicles);
          vehicles = vehicles.map(function(vehiclef, index){
            return(
              <li key={index}>{vehiclef}</li>
            )
          });

所以 for 循环中的日志正在向控制台打印出一个数组,其中包含预期的值。问题是,一旦 for 循环结束,车辆数组由于某种原因被清除,所以第二个控制台日志打印出一个空数组,这是为什么,我该如何停止它?

谢谢,埃德。

【问题讨论】:

    标签: arrays node.js api reactjs loops


    【解决方案1】:

    数组没有被清除,因为 javascript 是异步的,所以你的第二个 console.log 在你的循环执行之前首先运行。

    Promise/callback 是解决此问题的最佳方式。

    回调方式:

    var vehiclesT = asset.assetIDs;
      if(!asset.assetIDs){
        vehiclesT = [];
      }
      var y;
      var vehicles = [];
      for(y=0; y< vehiclesT.length; y++){
        var url = 'api/assetName/?vid='+vehiclesT[y]+'&id='+id;
        fetch(url, {credentials: 'include', method: 'get'}).then(function(body){
          return body.text();
        }).then(function(data) {
          vehicles.push(data);
          console.log(vehicles);
          if(y == vehiclesT.length - 1){
            vehicles = vehicles.map(function(vehiclef, index){
              return(
                <li key={index}>{vehiclef}</li>
              )
            });
          }
        });
      }

    【讨论】:

      猜你喜欢
      • 2018-07-17
      • 2021-10-03
      • 2021-01-13
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多