2012-02-17 10 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

それぞれの機能は何ですか?どのように定義されていますか? –

+0

誰かがなぜ落札したのでしょうか – mcgrailm

+0

私たちはあなたが使っているコードについて何も知らないので、あなたが使っている '.each()'メソッドが分からないので、 APIはループを壊す方法を提供するので、質問に直接答えることはできません。 (JavaScriptにはネイティブ '.each()'がありません) –

答えて

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;を実行することによって、あなたは関数とは異なる何かをやっていないと思います。すなわち、each()の短期circuitableバージョン - あなたはeach()へのアクセス権を持っている場合は

+0

これは私の問題を解決します..実際にはより多くの問題を引き起こしていた – mcgrailm

2

あなたが使用しているもの枠組み言いませんが、私は野生の推測を取ると、あなたがPrototype's Enumerable.eachを使用していると仮定するつもりです。もしそうなら、あなたはこの文を使用して「ループ」を終了することができます:

throw $break; 

each方法は、「『ループ』からの脱出」を意味すると理解しているカスタム例外をスローしています。

0

、おそらくあなたはsome()またはany()などへのアクセス権を持っています。

関連する問題