javascript打破了循环

时间:2012-02-17 01:36:24

标签: 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);
        }
        */
    }
});

3 个答案:

答案 0 :(得分: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;,您无法执行与函数无关的任何操作。

答案 1 :(得分:2)

你没有说你正在使用什么框架,但我会猜测并假设你正在使用Prototype's Enumerable.each。如果是这样,您可以使用以下语句退出“循环”:

throw $break;

抛出一个自定义异常,each方法理解为“突破'循环'”。

答案 2 :(得分:0)

如果您有each()的访问权限,那么您可以访问some()any()之类的内容 - 即each()的可短路版本。