2017-10-28 1 views
0

아래 메서드에서 반환 값을 얻는 방법을 알아낼 수 없습니다. 배열에 항목을 추가하고 있습니다. 그건 잘 작동합니다. 함수에서 반환 된 배열을 가져올 수 없습니다.executeQueryAsync에서 반환 값을 얻으려면 어떻게해야합니까?

var termList = loadTerms(termSetId); 

function loadTerms(termSetId) { 

     var termList = []; 
     var taxSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(clientContext); 
     var termStore = taxSession.getDefaultSiteCollectionTermStore(); 
     var termSet = termStore.getTermSet(termSetId); 
     var terms = termSet.getAllTerms(); 

     clientContext.load(terms, 'Include(Name)'); 

     clientContext.executeQueryAsync(
      function() {      

       for (var i = 0; i < terms.get_count(); i++) { 

        var term = terms.getItemAtIndex(i); 
        termList.push(term); 
        console.log(String.format('12 Term : {0}', term.get_name())); 
       } 

       // At this point TermList has the values I need. How do I return it to the caller? 

      });    
    } 

답변

0

동기식 메서드 내에서 비동기 호출에서 복귀 할 수 없기 때문에 불가능합니다. 그러나 콜백 함수를 전달하여 원하는 것을 얻을 수 있습니다.

var termList = loadTerms(termSetId); 
 

 
function loadTerms(termSetId, callback) { 
 

 
    var termList = []; 
 
    var taxSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(clientContext); 
 
    var termStore = taxSession.getDefaultSiteCollectionTermStore(); 
 
    var termSet = termStore.getTermSet(termSetId); 
 
    var terms = termSet.getAllTerms(); 
 

 
    clientContext.load(terms, 'Include(Name)'); 
 

 
    clientContext.executeQueryAsync(
 
    function() { 
 

 
     for (var i = 0; i < terms.get_count(); i++) { 
 

 
     var term = terms.getItemAtIndex(i); 
 
     termList.push(term); 
 
     console.log(String.format('12 Term : {0}', term.get_name())); 
 
     } 
 

 
     callback(termList); // callback here 
 

 
    }); 
 
} 
 

 
loadTerms("termSetId", function(returnedValue) { 
 
    console.log(returnedValue); //You get the value here. 
 
});

관련 문제