Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回真/假时Node.js停止函数_Javascript_Node.js - Fatal编程技术网

Javascript 返回真/假时Node.js停止函数

Javascript 返回真/假时Node.js停止函数,javascript,node.js,Javascript,Node.js,我对Node.js有点陌生,不知道如何实现我的目标 我有这样一个函数: function Timer() { setTimeout(function() { finish(); return true; }, 60000); setInterval(function() { if (fail()) { return false;

我对Node.js有点陌生,不知道如何实现我的目标

我有这样一个函数:

function Timer() {
        setTimeout(function() {
            finish();
            return true;
        }, 60000);  

        setInterval(function() {
            if (fail()) {
                return false;
            }
        }, 5000);
}
这个函数get被调用一次,当其中一个函数返回某个内容时应该停止。函数
fail()
基本上就是掷骰子,有5%的几率返回
false

函数
finish()
在超时结束时返回
true


当函数返回某个地方时,如何完全退出end my function?

使用一个变量来存储间隔和超时,以便在
end
函数满足所需条件(或超时完成)时,可以使用
clearInterval
clearTimeout,您应该将回调传递给
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);
}
现在,您的回调将收到true/false,具体取决于首先调用哪个回调

Timer(function(condition) {
    if (condition) doSomethingWhenConditionIsTrue();
    else doSomethingWhenConditionIsFalse();
});

您的函数是异步的,这意味着在
setTimeout
setInterval
之后退出,不返回任何值。在JavaScript中,函数被设计为异步的,它们不能停止主线程。

JavaScript使用执行模型,并且
setTimeout
setInterval
是异步的。这意味着您必须在稍后调用的函数中提供延续逻辑。您有三种选择:

  • 回拨
  • 许诺
  • 协同程序(仅当您在现代运行时上时)

  • 请澄清您的预期逻辑,我将补充此答案。

    您想写什么逻辑?掷骰子?