2017-11-02 5 views
1

これはいくつかの方法で.doneと.thenを使って試しましたが、同じ結果が得られます。配列は "pushTeamMembers"の内部にあります)、メインフローで表示しようとすると配列は空です。遅延されたjQuery Ajaxコールは関数内のデータのみを表示します

私はそれがある種のスコープの問題かもしれないと思っていましたが、最後のconsole.logの前にちょっとした一時停止(設定間隔)を入れてもうまくいきます - これはプログラムがデータは実際にプルダウンされます。ありがとう。

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

答えて

-1

更新:私はこれについて間違って考えていたと思います。 .done関数の中にデータを置くだけで十分です。 .done関数が終了する前にプログラムが進んで2番目のconsole.logを実行するので、プログラムの流れの中でデータにアクセスしようとすると、遅延したコンテキストのコンテキストの外で、遅れている点が破られます。プログラムの流れに落ちるのではなく、遅延した文脈の中で関数を連鎖させておく必要があります。私はこれがはっきりしていると思うし、私の投稿を削除するように誘惑されたが、これは私のようないくつかの初心者に役立つかもしれない。

関連する問題