Сапер серверный маршрут res.end не отправляет ответ, пока не завершится функция get - PullRequest
0 голосов
/ 31 октября 2019

Я столкнулся с проблемой при написании приложения Sapper, поэтому некоторое знакомство с ним, вероятно, поможет ответить ... хотя проблема также может быть в польке (например, экспресс) ... Я не уверен. Вот почему я здесь: -)

Вот упрощенный пример проблемы, с которой я столкнулся, и пытаюсь понять, почему. Это код для маршрута сервера Sapper, который возвращает JSON.

export function get(req, res) {
        let arr = [];
        let count = 0;
        let data = {"somekey": "someval"}
        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify(data));

        console.log('response sent');

        while (count++ < 1000000000) {
          arr.push(Math.random());
          arr.pop();
        }

        console.log(arr[arr.length - 1]);
}

Я ожидаю, что этот код:

  1. Отправит строковый JSON клиенту
  2. Журнал консоли «ответ отправлен» на сервер
  3. После завершения цикла while консоль записывает в журнал последний элемент массива на сервере.

Вместо этого консоль регистрирует ответ, отправленный'на сервере, но клиент зависает, и сервер не отправляет ответ, пока не завершится цикл while.

Я думал, что res.end должен отправить ответ, как только он доберется до res.end, новместо этого он, кажется, движется дальше и возвращает ответ только после завершения функции get.

Почему это так? Это Сапер, Полька или мое собственное недопонимание того, как работает res.end?

...