Как получать статус процесса с бекенда
Друзья, на бекенде (Node JS) выполняется весьма длительный процесс обработки данных. Как на фронтенде (React) в течение этого процесса показывать не только спиннер, но и прогресс бар с процентом завершения процесса. Другими словами как "заставить" бекенд переодически возвращать статус процесса еще до его завершения?
Спасибо. |
Есть много разных способов.
Самый примитивный: сделать на сервере эндпоинт типа /progress/<id>, который будет возвращать текущий статус и после запуска долбить этот эндпоинт раз в секунду или типа того. По сложнее: использовать websocket\Server Sent Events и слать оповещения о прогрессе там. Не слишком хороший(потому что перезагрузка вкладки всё сломает): не завершать запрос при запуске процесса, а постепенно досылать прогресс в него(типа long polling). |
Цитата:
|
Цитата:
router.post("/process", authenticateToken, async (req, res) => {...}) Внутри него в цикле идет обработка JSONа и формирование репорта. В этом цикле вставил несколько вызовов функции, в которую передаю процент завершения. (это все в Node).. Но как из фронтенда получать данные из этой функции. Можно конечно в базу данных писать процент завершения...и отдельным запросом считывать это значение с фронтенда...но это неверно будет неправильно. |
Если процесс долгий (больше ~30 секунд) - то только так и надо.
Если не такой уж долгий, то можно и как ты сейчас пытаешься. По современному: так https://developer.mozilla.org/en-US/...adable_streams По классике: XMLHttpRequest onreadystatechange по readyState === XMLHttpRequest.LOADING читаешь .resposeText. Ну и можно не слать какие-то конкретные значения, а просто имитировать загрузку(отправляя заранее заданное нужное кол-во байт) и слушать событие progress. |
Часовой пояс GMT +3, время: 05:26. |