我对Node.js有点新鲜,并且对如何实现我的目标感到困惑。
我有这样的功能:
function Timer() {
setTimeout(function() {
finish();
return true;
}, 60000);
setInterval(function() {
if (fail()) {
return false;
}
}, 5000);
}
这个函数被调用一次,当它内部的一个函数返回某个东西时它应该停止。函数fail()
基本上只是掷骰子,有可能有5%的回归false
。
当超时结束时,函数finish()
正在返回true
。
一旦某个地方返回某个地方,我如何完全退出我的功能?
答案 0 :(得分:2)
使用变量存储间隔和超时,以便在clearInterval
函数满足所需条件(或超时结束)时使用clearTimeout
/ end
,并且您应该将回调传递给Timer
函数,以便在间隔或超时完成后能够返回值:
function Timer(myCallback) {
var myInterval, myTimeout;
myTimeout = setTimeout(function() {
finish();
clearInterval(myInterval); //Clear the interval so that the callback won't be called again.
myCallback(true); //Call your callback function passing true.
}, 60000);
myInterval = setInterval(function() {
if (fail()) {
clearInterval(myInterval); //Clear the interval so that the callback won't be called again.
clearTimeout(myTimeout); //Clear the timeout so that the callback won't be called again.
myCallback(false); //Call your callback function passing false.
}
}, 5000);
}
现在你的回调将收到真/假,这取决于首先调用哪一个。
Timer(function(condition) {
if (condition) doSomethingWhenConditionIsTrue();
else doSomethingWhenConditionIsFalse();
});
答案 1 :(得分:0)
您的函数是异步的,这意味着在setTimeout
和setInterval
退出后,不返回任何值。在JavaScript中,函数被设计为异步,它们不能停止主线程。
答案 2 :(得分:0)
JavaScript使用run-to-completion执行模型,setTimeout
和setInterval
是异步的。这意味着您必须在稍后调用的函数中提供延续逻辑。您有三种选择:
请澄清您的预期逻辑,我将添加此答案。