我知道我应该知道如何做到这一点,但有些人如何逃避我。一旦我有匹配,我需要在这里退出循环。为什么这不起作用?
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);
}
*/
}
});
答案 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()
的可短路版本。