Далее 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)
и результаты отслеживания глобальных значений очищаются.