executeQueryAsync在SharePoint App中无法正常工作

时间:2014-11-03 20:38:03

标签: javascript sharepoint ecmascript-5

我在下面有一个函数来从Managed Metadata Service获取术语。当我调用一次函数时,一切正常。但是,如果我把它称之为更多次。它给出了致命错误"该集合尚未初始化......"实际上我使用单页应用程序,它只在我开始时打开网站时运行。这需要我整天的时间,我需要在一个页面中调用该功能5-6次。有人可以帮忙吗?我的代码出了什么问题?

var context = new SP.ClientContext(spContext.hostWeb.appWebUrl);
var taxSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);
var termStores = taxSession.get_termStores();
var termStore = termStores.getByName("Yönetilen Meta Veri Hizmeti");
var termSet = termStore.getTermSet(termsetguid);
var terms = termSet.getAllTerms();
context.load(terms);
context.executeQueryAsync(Function.createDelegate(this, onQuerySucceeded), Function.createDelegate(this, onQueryFailed));

function onQuerySucceeded(sender, args) {
try {
    var termEnumerator = terms.getEnumerator();
    var termList = [];
    while (termEnumerator.moveNext()) {
        var currentTerm = termEnumerator.get_current();
        termList.push(currentTerm.get_name());
    }} 
    catch (e) {
        common.logger.logWarning("Warning", "" , true);
    }
}
function onQueryFailed(sender, args) {
common.logger.logError("", "Error", true);
}

由于

1 个答案:

答案 0 :(得分:1)

在以下情况下通常会发生此错误:

  • 未明确或隐式请求客户端对象(在您的情况下为terms
  • SP.ClientContext.executeQueryAsync在循环中调用。自从 指定的函数 async 行为可能无法预测

尝试将变量设为本地(例如,使用匿名函数将其括起来)

(function(){

   var context = new SP.ClientContext(_spPageContextInfo.webAbsoluteUrl);
   var taxSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);
   var termStores = taxSession.get_termStores();
   var termStore = termStores.getByName(termStoreName);
   var termSet = termStore.getTermSet(termsetGuid);
   var terms = termSet.getAllTerms();
   context.load(terms);
   context.executeQueryAsync(Function.createDelegate(this, onQuerySucceeded),Function.createDelegate(this, onQueryFailed));

})();