【问题标题】:Node.js, Express, run a function AFTER sending a redirectNode.js,Express,在发送重定向后运行一个函数
【发布时间】:2022-06-15 01:30:20
【问题描述】:

我有一个简单的快递功能。

app.post('/thing', ensureLoggedIn("/loginpage"), urlencodedParser, (req, res) => {
    var func = req.body.func
    res.redirect('/')
    longRunningCalculation()
})

我想返回,然后执行 longRunningCalculation(例如,需要 5 秒)。

令人惊讶的是,这根本行不通。 Web 浏览器站点在那里等待五秒钟,然后重新加载。

如果我这样做......

app.post('/thing', ensureLoggedIn("/loginpage"), urlencodedParser, (req, res) => {
    var func = req.body.func
    res.redirect('/')
    setTimeout(longRunningCalculation, 1100)  // sloppy but WTF
})

它“有效”,但显然是废话。

我所说的“工作”是指网页确实会立即重新加载;然后 1.1 秒后,漫长的过程开始并按预期工作。

(奇怪的是,如果我做一小段时间,比如说“100”,它“不起作用”;它会再次表现出网页只重新加载一次,长时间的计算就完成了。)

解决办法是什么?

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    看来调用 next(); 应该对您有所帮助。您可以尝试执行以下操作:

    app.post('/thing', ensureLoggedIn("/loginpage"), urlencodedParser, (req, res) => {
        var func = req.body.func;
        res.redirect('/');
        next();
        longRunningCalculation();
    })
    

    你可以期待以更正确的方式做事:

    process.nextTick(() => {
      // do something
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 2023-04-09
      • 2014-07-31
      • 2016-02-10
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多