返回true / false

时间:2015-11-30 20:45:52

标签: javascript node.js

我对Node.js有点新鲜,并且对如何实现我的目标感到困惑。

我有这样的功能:

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

        setInterval(function() {
            if (fail()) {
                return false;
            }
        }, 5000);
}

这个函数被调用一次,当它内部的一个函数返回某个东西时它应该停止。函数fail()基本上只是掷骰子,有可能有5%的回归false

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

一旦某个地方返回某个地方,我如何完全退出我的功能?

3 个答案:

答案 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)

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

答案 2 :(得分:0)

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

  1. 回叫
  2. 承诺
  3. 协程(仅当你在现代运行时)
  4. 请澄清您的预期逻辑,我将添加此答案。