在Node.js中的回调函数中打破“for”循环

时间:2016-04-28 18:11:16

标签: javascript node.js return break asynccallback

关于下面的代码,我的目标是打破FOR LOOP B并继续使用FOR LOOP A,但是在回调函数中。

for(var a of arrA) {
    // ...
    // ...

    for(var b of arrB) {
        // ...
        // ...

        PartService.getPart(a.id, function(err, returnObj) {
            break;
        });
    }
}

这会给我我想要的结果吗?如果没有,我怎么能实现这个目标?

EDIT 4/28/16 3:28 MST

  • 回调函数确实是异步的

基于下面的一个答案和所有评论,在不改变问题范围的情况下,此时最好的问题可能是“如何在Node.js中实现同步回调函数?”。我正在考虑重构我的代码,以便删除for循环,但我仍然很好奇,如果我仍然可以使用同步回调函数朝这个方向前进。我知道Underscore.js使用同步回调函数,但我不知道如何实现它们。

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的方法,但只有在同步触发回调时它才会起作用。

for(var a of arrA) {
  let shouldBreak = false;
  for(var b of arrB) {
    if (shouldBreak)
      break;
   // rest of code
     PartService.getPart(a.id, function(err, returnObj) { // when the callback is called immediately it will work, if it's called later, it's unlikely to work
       shouldBreak = true;
    });

答案 1 :(得分:0)

这可能不会给您预期的结果。您可以使用事件EventEmitterasync模块。