2012-02-17 67 views
-1

我知道我应该知道如何做到这一点,但一些它如何逃脱我。一旦我有一场比赛,我需要退出循环。为什么这不起作用?javascript中断循环

ubot.registry.queue.each(function (dj, idx) { 
    console.log(idx); 
    var user = ubot.registry.users.get(dj.userid); 
    console.log(user.name); 
    console.log(rm_user) 
    if(user.name == rm_user) { 
     console.log(dj.userid); 
     return; // not exiting loop here 
     /* 
     if(!ubot.dj_timeout) { 
      ubot.remUserFromQueue(user); 
      return true; 
     } else { 
      console.log(ubot.dj_timout); 
     } 
     */ 
    } 
}); 
+6

什么是每个功能?它是如何定义的? – 2012-02-17 01:38:33

+0

有人会说为什么投票 – mcgrailm 2012-02-17 02:04:13

+0

我们对你使用的代码一无所知,所以我们不知道你使用的是什么'.each()'方法,所以我们不知道API提供了一种打破循环的方式,所以我们不能直接回答这个问题。 (JavaScript没有原生的'.each()'。) – 2012-02-17 02:09:57

回答

3

这是一个通用的解决方案,因为您没有给出关于您正在运行的代码的细节。

它不会打破循环。相反,它会阻止函数内部的代码在设置标志后运行。

var flag = false; 

ubot.registry.queue.each(function (dj, idx) { 
    if(!flag) 
     var user = ubot.registry.users.get(dj.userid); 
     if(user.name == rm_user) { 
      console.log(dj.userid); 
      flag = true; 
      // rest of the code 
     } 
    } 
}); 

“为什么这个不行?”

你返回undefined,但除非提供特定的返回值的函数始终回报undefined。所以通过做return;你没有做任何不同的功能会做任何不同。

+0

这解决了我的问题..实际上推迟回报导致更多的问题 – mcgrailm 2012-02-17 15:29:09

2

你不说你使用什么框架,但我要带胡乱猜测和假设你使用Prototype's Enumerable.each。如果是这样,你可以使用下面的语句退出“循环”:

throw $break; 

会抛出一个自定义异常的each方法理解为意为“打破了‘循环’的”。

0

如果你有机会获得each(),那么也许你有机会获得some()any()或类似 - 即,each()短circuitable版本。