Sapper服务器路由res.end在“获取”功能完成之前不发送响应

时间:2019-10-30 21:02:54

标签: javascript sapper

我在编写Sapper应用程序时遇到了问题,因此对它的一些熟悉可能会有助于回答...尽管问题也可能是波尔卡(例如express)...我不确定。这就是为什么我在这里:-)

这是我遇到的问题的简化示例,并且正在尝试理解原因。它是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”功能完成后才返回响应。

那是为什么?是Sapper,Polka还是我自己对res.end的误解?

0 个答案:

没有答案