我有一个帖子,它启动了一项可能需要半分钟以上的大型处理任务。
将微调器发送回响应然后在任务完成时重定向或显示结果的正确方法是什么?
我应该在临时 View 上使用 render(),然后在任务完成时异步使用 redirect() 吗?
这是我到目前为止的代码:
exports.postForm = function (req, res) {
console.log('postForm');
logger.info('Request Data:' + JSON.stringify(req.body));
// Do big task here... but how to tell user its happening?
};
更新 - 有关问题的更多详细信息:
所以我遇到的具体问题是:当我点击提交按钮时,帖子会回到 Express 中的这条路线。从这里我可以发送内容或重定向,无论我想要什么。假设我重定向到“处理”页面,然后启动异步调用以启动数据收集。那么,完成后如何再次重定向到“处理完成”页面?
我怀疑我可能需要在 Socket.IO 中完成所有这些,而不是使用 html post 来提交表单。我想然后我可以“点击”使用 socket.io 提交数据,然后我可以在类似 AJAX 的时尚中重写网页的一部分以指示“正在处理”,然后当我通过套接字完成事件时。 io 我可以再次重写页面说完成。这似乎是最好的前进方式吗?
最佳答案
只要您向渲染添加回调(或者,在现代脚本中,是 async/await
),您就可以根据需要进行多次渲染。
const asyncBlock = async () =>
{
await res.render('somePageWithLoadingGif');
await someTimeConsumingTask();
res.render('tada');
}
关于node.js - node.js Express 在执行耗时的帖子时显示微调器的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24241140/