Синхронный цикл while
блокируется, shouldRun = false
никогда не будет достигнут.
В приложениях, требующих параллелизма, таких как веб-сервер, следует избегать операций блокировки.
Опираясь на переменную глобального флагасомнительно, но это можно исправить с помощью цикла async
.Обработчик маршрута не должен ничего возвращать, возвращаемое значение должно быть отправлено в качестве ответа вместо этого.
Как объяснено в этом ответе , промежуточное программное обеспечение Express и обработчики маршрутов должны обрабатывать отклонения обещаний дляобеспечить правильную обработку ошибок, в случае функции async
это требует try..catch
:
app.get("/cpuup", async (req, res, next) => {
try {
var result = 0;
while (shouldRun) {
result += Math.random() * Math.random();
await null; // a delay
}
res.send('' + result);
} catch (err) {
next(error);
}
});