2016-11-12 2 views
0

zugreifen Ich versuche, Daten zu bekommen und zu analysieren, aber ich weiß nicht, wie man wartet, bis alle obigen Anweisungen gemacht werden.Warum kann ich nicht Objektwert in Javascript

Hier ist mein Code:

function get_unicodes() { 
     var deferred = $q.defer(); 

     var result = {'seen': [], 'all': []}; 

     var unicode_seen_raw = window.localStorage.getItem('LISTE_CARACTERES').split(" "); 
     var unicode_all = window.localStorage.getItem('CAROBJECTIF').split(" "); 

     for (value in unicode_seen_raw) { 
      $http({ 
       method: 'post', 
       url: DataService.URL, 
       headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, 
       data: $httpParamSerializerJQLike({ no_requete: 16, sParam: value }) 
      }).then(function (res, data) { 
       result['seen'].push(JSON.parse(res['data']['data'])[0]); 
      }); 
     } 
     for (value in unicode_all) { 
      $http({ 
       method: 'post', 
       url: DataService.URL, 
       headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, 
       data: $httpParamSerializerJQLike({ no_requete: 16, sParam: value }) 
      }).then(function (res, data) { 
       result['all'].push(JSON.parse(res['data']['data'])[0]); 
      }); 
     } 

     console.log(result); 
     console.log(result['seen']); 
     deferred.resolve(result); 
     return deferred.promise; 
    } 

    function update_biblio() { 
     get_unicodes().then(function (res) { 
      // stuff I want to do with res but can't 
     } 
    } 

Hier ist, was ich bekommen:

enter image description here

nach einiger Forschung, die ich, dass console.log() zu der Zeit gefunden wird result['seen'] ‚s-Wert bezeichnet nicht ist einstellen. Aber ich weiß nicht, wie ich das beheben soll.

Sollte ich eine Funktion aufrufen, um zu warten, bis meine http-Anfragen erledigt sind oder sie eine bessere Möglichkeit sind, es zu tun?

Antwort

2

$http ist asynchron, so lösen Sie das Versprechen sofort und bevor eine der Anfragen überhaupt abgeschlossen wurde.

Sie $q.all() für diese zusammen mit einer Reihe von Versprechungen von $http

function get_unicodes() { 
    // array to store all the request promises 
    var promises = []; 

    var result = {'seen': [],'all': []}; 

    var unicode_seen_raw = window.localStorage.getItem('LISTE_CARACTERES').split(" "); 
    var unicode_all = window.localStorage.getItem('CAROBJECTIF').split(" "); 

    for (value in unicode_seen_raw) { 
     var req1 = $http(...).then(function(res, data) { 
     result['seen'].push(JSON.parse(res['data']['data'])[0]); 
     }); 
     // push this promise to promise array 
     promises.push(req1); 
    } 
    for (value in unicode_all) { 
     var req2 = $http(...).then(function(res, data) { 
     result['all'].push(JSON.parse(res['data']['data'])[0]); 
     }); 
     // push this promise to promise array 
     promises.push(req2); 
    } 

    // return the `$q.all()` promise 
    return $q.all(promises).then(function() { 
     // fires after all promises in array are resolved 
     console.log(result); 
     console.log(result['seen']); 
     // return result 
     return result; 
    }).catch(function() { 
     // do something when not all requests succeed 
    }); 
} 
zurück verwenden könnten
Verwandte Themen