【发布时间】:2016-04-28 18:11:15
【问题描述】:
关于下面的代码,我的目标是跳出 FOR LOOP B 并继续 FOR LOOP A,但在回调函数中。
for(var a of arrA) {
// ...
// ...
for(var b of arrB) {
// ...
// ...
PartService.getPart(a.id, function(err, returnObj) {
break;
});
}
}
这会给我想要的结果吗?如果没有,我该如何实现?
编辑 4/28/16 3:28 MST
- 回调函数确实是异步的
基于其中一个答案和下面的所有 cmets,在不改变问题范围的情况下,也许此时最好的问题是“如何在 Node.js 中实现同步回调函数?”。我正在考虑重构我的代码以删除 for 循环,但我仍然很好奇我是否仍然可以使用同步回调函数朝这个方向发展。我知道Underscore.js使用了同步回调函数,但是不知道怎么实现。
【问题讨论】:
-
“这会给我想要的结果吗?” ——你试过了吗?
-
为什么
PartService.getPart首先要回调?是异步的吗? -
break只能在循环内。回调引入了一个新边界,因此在for循环内不考虑它。此外,在执行回调之前,两个循环都将运行完成(假设它是异步的)。循环是同步的,因此它们不能很好地播放异步代码(在它们的主体中)。首先阅读有关 JavaScript 中的异步代码流的更多信息可能对您很有用。 -
感谢 Felix Kling,是的,它是异步的。我从未听说过同步回调函数。我实际上是在尝试将 PHP 代码转换为 JavaScript,看来我需要多花点心思。
-
这个
break应该给你一个运行时错误,或者只是被忽略,因为它不在循环中。
标签: javascript node.js return break asynccallback