【问题标题】:How do I stop a function from running early in NodeJS? [duplicate]如何阻止函数在 NodeJS 中过早运行? [复制]
【发布时间】:2021-05-04 16:24:05
【问题描述】:

我目前正在尝试停止当前正在执行的功能,以便可以重新运行它,例如开始/停止按钮。我尝试使用return;,但我不确定我是否使用错了。我试过抛出错误,但也没有用。

举个例子:

function testFunction(action) {
    if (action === "stop") {
        return;
    } else if (action === "start") {
        // do work
    }
}

testFunction("start");

// testFunction("stop"); (stop the function)```

【问题讨论】:

  • 欢迎来到 Stackoverflow!你能详细说明你的问题吗?是不是一旦你暂停了你的函数,直到你手动启动它才能启动它?
  • 谢谢!我希望能够通过使用参数来启动或暂停它。因此,如果我调用函数 testFunction("start") 它将启动该函数。如果我执行 testFunction("stop") 它会在函数当前运行时停止它。
  • 不正确,应该使用clearInterval
  • 我没有在final函数中使用setInterval,只是作为一个例子来测试函数是否运行。
  • 您不能在同步函数运行时阻止它运行。如果函数中有异步操作或函数中有定时器,那么你就有机会停止它。但是,在您向我们展示您想要停止运行的函数中的实际代码之前,我们无法为您提供任何有意义的帮助。

标签: javascript node.js function


【解决方案1】:

我猜你想停止 setInterval 的执行,因为你可以从函数返回 setInterval 的结果并将其传递给 clearInterval 以避免它的执行。

为此,您可能还需要添加检查功能是否已启动 但是现在,重写的脚本可能是这样的

function testFunction(action, process) {
    if (action === "stop") {
        return clearInterval(process);
    } else if (action === "start") {
        return setInterval(() => {
            console.log('hi')
        }, 5000);
    }
}
var process;
process = testFunction("start");
testFunction("stop", process);

编辑
既然你说 setInterval 只是一个例子
如果代码是同步的,那么函数将继续执行,并且您将无法在函数调用后运行任何代码来停止它。如果是异步的,则依赖于代码结构,示例参考this

【讨论】:

  • 对不起,我没有说清楚,我只是重新编辑了代码。我不打算在最终函数中使用 setInterval,因为我只是用它来确定函数是否实际停止或仍在运行。我只想知道如何停止不使用 setInterval 或 setTimeout 的函数。
  • @Andrew 如果代码是同步的,那么函数将继续执行,您将无法在函数调用后运行任何代码来停止它。如果是异步的,参考this
  • @Andrew 你的代码是同步的还是异步的?
  • @Geek 是异步的,但是里面也调用了其他函数
  • 这行得通,非常感谢@Geek 我已经坚持了好几天了,这对我有很大帮助,让我更接近我想要做的事情。
猜你喜欢
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多