Javascript 调用函数(使用成功处理程序)后,循环停止执行
我在函数Function1的成功处理程序中运行的循环中调用函数Function2。在我调用函数Function2时循环的第一次迭代中,调用函数Function2并按照被调用函数Function2的成功处理程序中的指定执行操作。但是在这之后,控件不再转移到第一个函数Function1的成功处理程序中的循环,循环不再执行。下面的代码解释了该场景:Javascript 调用函数(使用成功处理程序)后,循环停止执行,javascript,sharepoint,Javascript,Sharepoint,我在函数Function1的成功处理程序中运行的循环中调用函数Function2。在我调用函数Function2时循环的第一次迭代中,调用函数Function2并按照被调用函数Function2的成功处理程序中的指定执行操作。但是在这之后,控件不再转移到第一个函数Function1的成功处理程序中的循环,循环不再执行。下面的代码解释了该场景: function Function1() { clientContext = SP.ClientContext.get_current();
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,但在警报显示循环结束时写入循环下面的代码甚至没有执行。
我看不出哪里出了问题,非常欢迎你的建议。请引导我完成此操作。以下是一些提示:
使用Chrome和开发者控制台F12->Network选项卡查看请求的响应。
添加一些console.log语句,查看是否正在调用函数,但并不总是到达成功回调。例如:
确保在使用console.log时打开了开发人员工具,因为这些语句将导致IE中的错误,而开发人员工具关闭
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());
}
}