2012-02-17 68 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版本。