是否可以使用 Next JS 触发运行时间较长的后台任务?



Next JS似乎在调用后使用某些逻辑自动"清理"API脚本(我假设在"res"被调用后的一段时间。 是否可以在 res 回调后使脚本运行不确定的时间段,以便它保持活动状态,直到一些运行时间更长的触发后台活动(如缓慢渲染(完成?

一个简单的示例,一个端点,可以在处理任务时"轮询"以启动任务,并最终响应完成的结果:

api/myscript

法典:


var result = null
var processing = true
export default (req, res) => {
if (result) {
res.end(result)
} else if (!processing) {
new Promise((result, reject) => {
exec(cmd, ("ffmpeg -takeareallylongtime", stdout, stderr) => {
if (error) {
reject(error);
}
else {
resolve("All done");
}
})})
.then(_ => {
result = "All done!"
})
.catch(_ => {
result = "I'm sorry to have failed you."
})
res.end("Started task")
} else {
res.end("Still processing...")
}
}

我看到的行为是运行器启动,客户端定期轮询并获取有效状态,并且在处理过程中的某个时刻页面被清除:

[ event ] disposing inactive page(s)

并清除全局值跟踪结果。

api 文件夹中的任何内容都是"函数"脚本,处理方式类似于 AWS Lambda。这些通常是短暂的,但由于成本,Next.is 会限制它们。它们也有可能通过 API 网关运行,该网关也有最大超时。

如果您的 API调用超时,那么这实际上意味着您的 Node/Express 服务器正在使您的 API 请求超时。可以使用以下代码增加默认超时

var server = app.listen();
server.setTimeout(10 * 60 * 1000);

如果它们是运行时间很长的任务,则可以使用 socket.io 或长轮询技术来探索使用 WebSocket。

最新更新