2017-10-28 2 views
0

Ich kann nicht herausfinden, wie man einen Rückgabewert von der Methode unten erhält. Ich füge Elemente zu einem Array hinzu. Das funktioniert gut. Ich kann das Array nur nicht von der Funktion zurückgeben.Wie bekomme ich den Rückgabewert von 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? 

      });    
    } 

Antwort

0

Es ist unmöglich, da Sie nicht von einem asynchronen Aufruf innerhalb einer synchronen Methode zurückkehren können. Aber Sie können bekommen, was Sie wollen, indem Sie eine Callback-Funktion übergeben.

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

Verwandte Themen