Я пишу промежуточное ПО Koa, которое при каждом запросе к серверу анализирует некоторые входные данные из файла на сервере и отправляет их через веб-сокет (используя 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 замораживаются при первом запуске, поэтому не обновляются при каждом запуске этого кода (при каждом запросе).
Редактировать: для контекста приведенный выше фрагмент кода находится внутри функции промежуточного программного обеспечения как это:
myMiddleware = async (ctx, next) => {
await next();
// my code snippet above
}
И промежуточное программное обеспечение запускается на Коа так:
app.use(myMiddleware);