我正在编写一个 Koa 中间件,它在对服务器的每个请求时,分析来自服务器上文件的一些输入,并通过 websocket(使用https://www.npmjs.com/package/ws)将其发送到客户端.
这一切都按预期工作,除了一个问题。数据(作为分析文件输入的结果)正确更新,但不会在 websocket 回调范围内更新。
const websocket = new WebSocket.Server({ port: 8082 });
const sourceAST = parseJS();
const conditionResults = getConditionResults(sourceAST);
console.log('handling request', conditionResults); // <-- updates as expected every time
websocket.on('connection', ws => {
console.log(conditionResults); // <-- not updated :(
ws.send(
JSON.stringify({
type: 'feedback-updated',
feedback: conditionResults,
}),
);
});
我似乎无法弄清楚为什么 ws 回调中的 conditionResults 在第一次运行时被冻结,为什么每次运行此代码时它都不会更新(在每个请求上)。
编辑:对于上下文,上面的代码片段位于这样的中间件函数中:
myMiddleware = async (ctx, next) => {
await next();
// my code snippet above
}
中间件在 Koa 中运行如下:
app.use(myMiddleware);