我写了一个我认为是异步的循环。
任何人都可以确认是否吗?
这是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);
};
}
最佳答案
您的循环是同步的。
您创建的所有功能都是同步的,没有使功能异步的功能。
您将回调函数传递给他们的事实无济于事,因为他们没有在后台执行某些操作,等待其返回或类似操作。
您的代码甚至无法正常工作,因为您在声明变量之前尝试使用它们。
而且,如果我们假设您在尝试使用变量之前就已经定义了变量,即使在那里,您也将没有异步功能。如果调试代码,您将看到它进入每个函数内部并执行完整的循环,然后转到代码的下一行。
例如,如果您使用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);
};
关于javascript - 这个javascript循环仍然是异步的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32717300/