2017-08-01 91 views
0

所以我有這樣的代碼,將數據添加到一個數組是運行每秒:陣列被清除

  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循環結束,車輛數組因爲某種原因被清除,所以第二個控制檯日誌打印出一個空數組,爲什麼是這樣以及如何停止它?

謝謝,編輯。

回答

1

數組未被清除,因爲javascript是異步的,您的第二個console.log在您的循環執行之前先運行。

承諾/回調是解決此問題的最佳方法。

回撥方式:

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> 
 
     ) 
 
     }); 
 
     } 
 
    }); 
 
    }