这个javascript循环仍然是异步吗?

时间:2015-09-22 12:47:20

标签: javascript loops asynchronous callback

我写了这个循环,我认为是异步。

有人可以确认是否可以吗?

它有3个函数可以反复调用,直到迭代用完为止。完成后,它会调用父函数中的回调。

function compareRightsLoop(rights, request, callback) {
    loopInit(request.length, 0, 0, loopIncrement);

    var loopInit = function(max, inc, boolIncr, initLoopIncrement) {
        if (rights.indexOf(request[inc]) === -1);
        else
          boolIncr++;
        initLoopIncrement(max, inc, boolIncr, this, loopTerminate);
    };

    var loopIncrement = function(max, inc, boolIncr, initLoopInit, initLoopTerminate) {
        inc++;
        if (max === inc)
          initLoopTerminate(max, inc, boolIncr);
        else
          initLoopInit(max, inc, boolIncr);
    };

    var loopTerminate = function(max, inc, boolIncr) {
        if (max == boolIncr)
          callback(true);
        else
          callback(false);
    };
}

1 个答案:

答案 0 :(得分:1)

你的循环是同步的。

您创建的所有功能都是同步功能,并且没有任何功能可以使您的功能异步。

你将回调函数传递给他们的事实什么也没说,因为他们不在后台执行某些事情,等待它返回或类似的东西。

您的代码甚至无法正常工作,因为您在声明变量之前尝试使用这些变量。

而且,如果我们假设您在尝试使用它们之前已经定义了变量,那么即使在那里,您也不会拥有异步函数。如果您调试代码,您将看到它进入每个函数内部并执行完整循环,然后转到代码的下一行。

例如,如果您使用setTimeout进行呼叫,那将是异步的,如下所示:

var loopInit = function(max, inc, boolIncr, initLoopIncrement) {
  setTimeout(function() {
    if (rights.indexOf(request[inc]) === -1);
    else
      boolIncr++;
    initLoopIncrement(max, inc, boolIncr, this, loopTerminate);
  }, 0);
};