2017-08-01 1 views
0

So habe ich diesen Code, die Daten in ein Array addiert, die in jeder Sekunde ist lautet:Array wurde gelöscht

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

So das Protokoll in der for-Schleife ist eine Reihe an die Konsole mit den erwarteten Werten Ausdrucke in es. Das Problem ist, dass, sobald die for-Schleife beendet ist, das Vehikel-Array aus irgendeinem Grund gelöscht wird, so dass das zweite Konsolenprotokoll ein leeres Array ausgibt, warum ist das und wie kann ich es stoppen?

Danke, Ed.

Antwort

1

Array ist nicht gelöscht, da Javascript asynchron ist, wird Ihre zweite console.log zuerst ausgeführt, bevor Ihre Schleife ausgeführt wird.

Versprechen/Rückruf ist der beste Weg, um dieses Problem zu lösen.

Rückruf Weg:

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

Verwandte Themen