[英]How To Break A For Loop Inside An Asynchronous Callback Function
我正在尝试打破异步回调内的嵌套for循环,但无法这样做:
function asyncCall(id, OnComplete) {
// id..
context.executeQueryAsync(OnSuccess, OnFailure);
function OnSuccess(sender, args) {
OnComplete(userInGroup);
}
function OnFailure(sender, args) {
console.error("Doesn't Exist!")
}
}
function callApi() {
//response from intial call
for (var key in response) {
var data = response[key];
(function (innerData) {
if (innerData) {
renderHTML(innerData);
}
})(data);
}
}
function renderHTML(data) {
for (var key in data) {
var index = data[key];
(function (innerData, id) {
asyncCall(id, function (isFound) {
if (isFound)
break; //break loop
});
})(data, index);
}
}
callApi();
我想打破循环,如果属性isFound
的值在响应中为true,并且只想在ES5中实现此目的,或者像同步调用之类的任何变通方法都可能有所帮助。
你不能
循环将在到达break
之前完成。
唯一的方法是串行而不是并行运行asyncCall
每次调用。 (例如,通过从传递给上一个回调函数的回调函数中调用下一个)。
正如Quentin
所说,你不能。
但是,如果要防止发生进一步的回调,则可以设置一个变量,以防止发生回调。
let isFound = false;
function asyncCall(id, OnComplete) {
// id..
context.executeQueryAsync(OnSuccess, OnFailure);
function OnSuccess(sender, args) {
if(isFound) return;
isFound = true;
OnComplete(userInGroup);
}
function OnFailure(sender, args) {
console.error("Doesn't Exist!")
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.