Node.js在返回true/false时停止函数

Node.js stop function when return true/false

本文关键字:函数 false js 返回 true Node      更新时间:2023-09-26

我对Node.js有点陌生,对如何实现我的目标感到困惑。

我有一个这样的功能:

function Timer() {
        setTimeout(function() {
            finish();
            return true;
        }, 60000);  
        setInterval(function() {
            if (fail()) {
                return false;
            }
        }, 5000);
}

这个函数get被调用一次,应该在其中一个函数返回某个值时停止。函数fail()基本上只是掷骰子,有5%的几率返回false

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

一旦函数返回某个位置,我如何完全退出它?

使用一个变量来存储间隔和超时,这样当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();
});

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

JavaScript使用从运行到完成的执行模型,setTimeoutsetInterval是异步的。这意味着您必须在稍后调用的函数中提供延续逻辑。你有三个选择:

  1. 回调
  2. 承诺
  3. 推论(仅当您在现代运行时)

请澄清你想要的逻辑,我会补充这个答案。