0

我在编写 Sapper 应用程序时遇到了问题,因此熟悉它可能有助于回答……尽管问题也可能是 polka(如 express)……我不确定。这就是我在这里的原因:-)

这是我遇到的问题的简化示例,我试图了解原因。它是返回一些 JSON 的 Sapper 服务器路由的代码。

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”函数完成后才返回响应。

这是为什么?是 Sapper、Polka 还是我自己对 res.end 工作原理的误解?

4

0 回答 0