2017-11-02 8 views
1

Ich habe versucht, diese verschiedene Möglichkeiten, mit .done und .then, und ich bekomme das gleiche Ergebnis - die Daten scheint das Array zu füllen gut (ich kann console.log Array innerhalb von "pushTeamMembers"), aber das Array ist leer, wenn ich versuche, es im Hauptfluss zu sehen.Deferred jQuery Ajax Call zeigt nur Daten innerhalb der Funktion

Ich dachte, es könnte ein Problem mit dem Oszilloskop sein, aber es funktioniert gut, wenn ich vor dem letzten console.log eine kleine Pause (Intervall) setze - was implizieren soll, dass das Programm die Daten vor dem anzeigt Daten werden tatsächlich heruntergezogen. Vielen Dank.

var siteurl = _spPageContextInfo.webAbsoluteUrl; 
var teamMembers = []; 

// ********** Ajax query 
    var teamListData = $.ajax({ 
     type: 'get', 
     url: siteurl + "/_api/web/lists/getbytitle('The Team')/items", 
     headers: { "Accept": "application/json; odata=verbose" } 
    }); 

// ********** Ajax query deferred ".then" handler 
    teamListData.then(function (value) { 
     $.each(teamListData, function(i, item) { 
     var thisNameId = teamListData[i].NameId; 
     var workStream = teamListData[i].Title; 
     var member = {id: thisNameId, workstream: workStream}; 
     pushTeamMembers(member); 
     }); 
    }); 

// ********** Push onto array 
     function pushTeamMembers(member) 
     { 
     teamMembers.push(member); 
     // ********** This shows that the array is populated. 
     console.log(teamMembers); 
     } 

// ********** This shows that the array is empty - unless I put a 
// slight pause here (set interval). 

console.log(teamMembers); 

Antwort

-1

UPDATE: Ich glaube, ich war falsch darüber nachgedacht. Ich brauche nur die Daten innerhalb der .done-Funktion. Das Programm wird fortfahren und das zweite console.log ausführen, bevor die .done-Funktion beendet ist, so dass der Versuch, auf die Daten im Programmablauf zuzugreifen, außerhalb des Kontextes des verzögerten Kontexts, den Zeitpunkt der Zurückstellung vereitelt. Anstatt in den Programmablauf zurückzufallen, muss ich nur die Funktionen innerhalb des verzögerten Kontexts verketten. Ich denke, das ist offensichtlich und ich war versucht, meinen Beitrag zu löschen, aber vielleicht hilft das einigen Neulingen wie mir.

Verwandte Themen