我在编写 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]);
}
我希望这段代码:
- 将字符串化的 JSON 发送到客户端
- 服务器上的控制台日志“已发送响应”
- while 循环完成后,控制台记录服务器上数组的最后一个元素。
相反,它在服务器上控制台记录“发送的响应”,但客户端挂起并且服务器在 while 循环完成之前不会发送响应。
我认为 res.end 应该在到达 res.end 后立即发送响应,但它似乎继续前进,并且仅在“get”函数完成后才返回响应。
这是为什么?是 Sapper、Polka 还是我自己对 res.end 工作原理的误解?