首页 > 解决方案 > 延迟 RES.REDIRECT 直到函数完成?或完成时刷新页面?

问题描述

我需要'延迟' res.redirect('/foo') 直到某些功能完成它们的任务并且我需要你的帮助。

/foo 页面是从数据库中填充的。当用户完成交易后,我需要去处理记录,然后删除记录,最后对现在空的数据库“重新加载”/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 调用?如果可以,怎么做?

标签: javascriptnode.jsexpress

解决方案


您可以修改函数的返回值,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');
        });
});

推荐阅读