我在一个在函数(Function1)的成功处理程序中运行的循环中调用一个函数(Function2)。在循环的第一次迭代中,当我调用函数(Function2)时,调用该函数并执行opertation,如在被调用函数(Function2)的成功处理程序中指定的那样。但在此之后,控件不会转移到第一个函数(Function1)的成功处理程序中的循环,并且循环不再执行。下面的代码解释了这个场景:
function Function1()
{
clientContext = SP.ClientContext.get_current();
website = clientContext.get_web();
var oList = web.get_lists().getByTitle('Test');
var camlQuery = new SP.CamlQuery();
this.collListItem = oList.getItems(camlQuery);
clientContext.load(this.collListItem, 'Include(ID, LinkFilename, Sender, Created, DocIcon)');
clientContext.executeQueryAsync(
Function.createDelegate(this, successHandler),
Function.createDelegate(this, errorHandler)
);
function successHandler() {
var itemsCount = this.collListItem.get_count();
for (i = 0; i < itemsCount; i++) {
var item = this.collListItem.itemAt(i);
alert(item.get_fieldValues()["Created"]);
Function2();
}
alert('Loop ends');
}
function errorHandler() {
}
}
现在功能2如下:
function Function2(){
var context = SP.ClientContext.get_current();
var web = context.get_web();
var oList = web.get_lists().getByTitle('Test2');
var camlQuery = new SP.CamlQuery();
this.collListItem = oList.getItems(camlQuery);
context.load(this.collListItem, 'Include(ID, BaseName, Created, ServerUrl)');
context.executeQueryAsync(
Function.createDelegate(this, success),
Function.createDelegate(this, error)
);
function success() {
var itemsCount = this.collListItem.get_count();
for (i = 0; i < itemsCount; i++) {
var item = this.collListItem.itemAt(i);
alert(item.get_fieldValues()["ServerUrl"]);
}
}
function error(){
}
}
现在我遇到的问题是,即使itemsCount
大于1,代码也会在第一个函数的第一次循环中运行(之后是在循环下面写的代码(警报显示&#34;循环结束&#34;)甚至不执行)。
我无法发现什么是错的,你的建议非常受欢迎。请指导我完成这个。
答案 0 :(得分:0)
以下是一些提示:
function Function2() { console.log("Function2"); var context = SP.ClientContext.get_current(); var web = context.get_web(); var oList = web.get_lists().getByTitle('Test2'); var camlQuery = new SP.CamlQuery(); this.collListItem = oList.getItems(camlQuery); context.load(this.collListItem, 'Include(ID, BaseName, Created, ServerUrl)'); context.executeQueryAsync( Function.createDelegate(this, success), Function.createDelegate(this, error) ); function success() { var itemsCount = this.collListItem.get_count(); for (i = 0; i < itemsCount; i++) { var item = this.collListItem.itemAt(i); alert(item.get_fieldValues()["ServerUrl"]); } } function error(sender, args) { console.log("Request failed: " + args.get_message() + ". " + args.get_stackTrace()); } }
确保在使用console.log时打开了开发人员工具,因为这些语句会在关闭开发人员工具的IE中导致错误。