2017-11-02 20 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 함수가 끝나기 전에 두 번째 console.log를 실행합니다. 따라서 지연된 컨텍스트의 컨텍스트 외부에서 프로그램의 흐름에있는 데이터에 액세스하려고하면 지연되는 지점을 무효화합니다. 프로그램 흐름으로 되돌아 가지 않고 지연된 컨텍스트 내부에서 함수를 연결해야합니다. 나는 이것이 분명하고 내 게시물을 삭제하려고 유혹을 받았지만 아마 이것은 나 같은 초보자를 도울 것입니다.