繁体   English   中英

如何在异步回调函数中中断For循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM