【发布时间】:2012-02-09 05:41:30
【问题描述】:
我正在使用 node.js 构建一些东西,我正在使用 jQuery .each() 遍历所有 img 标签。在所有回调 .each() 启动完成后,我将在 foo 中获得我需要的值。
var foo = -1;
window.each(function() {
// abracadabra
if (baz) foo = bar;
});
return foo; // this returns the incorrect foo as not all callbacks are complete
我该如何解决这个问题?
编辑
一种方法是有一个无限循环,不断检查回调计数,当所有回调完成时返回foo。我觉得这有点hack-ish,会有更好的东西吗?
var allCallbacksDone = false;
var foo = -1;
window.each(function(index, element) {
// abracadabra
if (baz) foo = bar;
if (index == window.length - 1) allCallbacksDone = true;
});
while (!allCallbacksDone) {
continue;
}
return foo;
二次编辑
abracadabra 是一个 GET 请求,用于下载异步的远程图像。
【问题讨论】:
-
你在做什么导致回调?回调处理程序是一个单独的函数,可以异步运行。如果它只是你正在运行的“每个”,那么它在解析所有选定的元素之前不会退出。
-
异步回调在哪里?
.each函数不是严格的回调,它只是一个函数引用。回调是一个稍后调用以响应某个事件的函数。 -
重要的问题是
abracadabra是什么。如果它不是异步的,那么这里就没有异步发生。each是同步的。 -
@lonesomeday
abracadabra是下载远程图像的 GET 请求。 -
@lonesomeday:我早该指定的。太晚了,已经投了-1票。 :(
标签: javascript jquery node.js asynchronous callback