NodeJS 延迟RES.REDIRECT直到函数完成?完成后是否刷新页面?

kh212irz  于 2023-08-04  发布在  Node.js
关注(0)|答案(2)|浏览(160)

我需要'delay' res.redirect('/foo'),直到一些函数完成了它们的任务,我需要你的帮助。
/foo页面是从一个DB填充的。当用户完成事务后,我需要处理记录,然后删除记录,最后在空数据库中'reload' /foo(准备好新的输入,所以是空的)
当它坐着的时候,/foo加载了当前的数据(如果它等到doThis和thenThisCallback完成,它就没有数据可以显示,这正是我想要的)。
当最后一个功能完成时,我可以从它开始进行“页面刷新”吗?有点像location.reload()或window.location.href ='/foo'。(我尝试了,Node不喜欢我的尝试)。

app.get('/foo/bar/:aparam', function(req, res) {
    doThis(a, thenThisCallback)

    // Dont redirect until 'thenThisCallback' is finished
    res.redirect('/foo');
})

字符串
当我的最后一个函数完成并且我知道数据库中的过期数据已被清除时,我想“刷新”或“按需”重定向。目前,Node不关心我的删除操作是否完成:)
也许我可以省略路由中的res.redirect('/foo'),并在最后的函数中对/foo进行GET调用?如果可能的话,怎么做?

xghobddn

xghobddn1#

您可以修改doThis函数的返回值,使其返回回调函数,然后该回调函数返回Promise<void>。这样做,你可以在函数解析后进行链式操作。

// I'm not 100% sure about the parameters
const promisedCallback = (...params) => {
    return new Promise((resolve, reject) => {
        thenThisCallback(...params);
        resolve();
    });
};

app.get('/foo/bar/:aparam', function(req, res) {
    doThis(a, promisedCallback)
        .then(() => {
            res.redirect('/foo');
        });
});

字符串

tvmytwxo

tvmytwxo2#

您可以添加一个延迟,以确保在重定向用户之前完成数据库中的每个修改。

setTimeout(function() {
    res.redirect('/');
}, 1000);

字符串

相关问题