В настоящее время работает над проектом с использованием Websockets и node.js. На данный момент я генерирую некоторые случайные числа и отправляю их клиенту каждые полсекунды.Извлечение переменной из области обработчика событий
var array = [];
wss.on("connection", function (ws) {
setInterval(function() {
var data = Math.floor(Math.random() * 100) + 1; //create a random whole number between 1-100
var msg = JSON.stringify(data); //convert data to JSON string
ws.send(msg); //send JSON string to client
}, 500);
})
Однако теперь я хотел бы каждую минуту хранить значение в эту минуту в базе данных. Я не хочу вставлять свои вставки в mongodb в функцию wss.on
, поскольку это кажется грязным. Есть ли способ для меня получить значение data
вне сферы действия wss.on
и в array
?
Я пытался использовать array.push()
, но, очевидно, это не сработало. Любая помощь и ссылки на необходимые чтения по этому вопросу были бы весьма признательны.
То, что вы считаете «грязным», является правильным способом сделать это. Гнездо это. Если вы действительно этого хотите, вы можете поместить вставку в отдельную функцию и вызвать ее из sindie. Асинхронное время действует только в обратном вызове async, поэтому вы выполняете свою работу. Вы можете поместить 'data' в массив с более высоким охватом и сохранить его там, но время, когда значение только что было добавлено в массив, ТОЛЬКО известно внутри обратного вызова' setInterval() '. – jfriend00
Спасибо! Планировал обернуть мою вставку в функцию и сделать ее таким образом, если все остальное не получилось. Просто хотел убедиться, что есть более эффективный способ сделать это, прежде чем я попытаюсь это сделать. – Jambo