javascript循环中断

javascript循环中断,javascript,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_us

我知道我应该知道如何做到这一点,但有些事情让我不知所措。一旦我有了匹配,我需要退出循环。为什么这不起作用

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

你不会说你在用什么框架,但我会做一个粗略的猜测,假设你在用。如果是,可以使用以下语句退出循环:

throw $break;

这会引发一个自定义异常,每个方法都会将其理解为脱离“循环”的意思。

这里有一个通用的解决方案,因为您尚未向我们提供有关正在运行的代码的详细信息

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

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
        }
    }
});
为什么这不起作用

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

返回的是未定义的,但函数总是返回未定义的,除非提供了特定的返回值。这样做,回报;您所做的与函数所做的没有任何不同。

如果您可以访问每个函数,那么您可能可以访问一些或任何类似的函数,即每个函数的短路版本。

每个函数是什么?它是如何定义的?有人会问为什么我们对你使用的代码一无所知,所以我们不知道是什么。你使用的每个方法,所以我们不知道API是否提供了一种打破循环的方法,所以我们不能直接回答这个问题。JavaScript没有本机的。each.you不打算回答@DanielA.White的问题吗?这解决了我的问题。。事实上,把回报放进去造成了更多的问题