这个 javascript 循环仍然是异步的吗?
Is this javascript loop still Async?
我写了这个我认为是异步的循环。
有人可以确认一下吗?
它是 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);
};
}
你的循环是同步的。
您创建的所有函数都是同步的,没有任何东西可以将您的函数转为异步。
您将回调函数传递给他们这一事实说明不了什么,因为他们不会在后台执行某些操作,而是等待 return 或类似的东西。
您的代码甚至无法运行,因为您试图在声明变量之前使用它们。
而且,如果我们假设您在尝试使用变量之前已经定义了它们,即使在那里,您也不会有异步函数。如果你调试代码,你会看到它进入每个函数并执行完整的循环,然后再转到下一行代码。
它将是异步的,例如,如果您使用 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);
};
我写了这个我认为是异步的循环。
有人可以确认一下吗?
它是 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);
};
}
你的循环是同步的。
您创建的所有函数都是同步的,没有任何东西可以将您的函数转为异步。
您将回调函数传递给他们这一事实说明不了什么,因为他们不会在后台执行某些操作,而是等待 return 或类似的东西。
您的代码甚至无法运行,因为您试图在声明变量之前使用它们。
而且,如果我们假设您在尝试使用变量之前已经定义了它们,即使在那里,您也不会有异步函数。如果你调试代码,你会看到它进入每个函数并执行完整的循环,然后再转到下一行代码。
它将是异步的,例如,如果您使用 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);
};