2016-12-19 44 views
0

当前正在使用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); 


}) 

但是现在我想每分钟都将当时的值存储到数据库中。我不想在wss.on函数中嵌套我的插入mongodb,因为它看起来很乱。有没有办法让data的值超出wss.on的范围和array?我试过使用array.push(),但显然它不起作用。任何帮助和链接到必读的这个问题将不胜感激。

+1

你认为“杂乱”是做到这一点的正确方法。嵌套它。如果你真的想要的话,你可以把插入放在一个单独的函数中,并从间隔中调用它。异步时间只在异步回调中有效,因此您可以在此工作。你可以将'data'放入一个更高范围的数组中并将其存储在那里,但是在'setInterval()'回调中只知道一个值刚添加到数组的时间。 – jfriend00

+0

谢谢!正在计划将我的插入包装在一个函数中,并且如果所有其他方法都失败了,就这样做。只是想在我尝试之前确保有一种更有效的方式。 – Jambo

回答

1

使我的评论成为一个答案,因为它似乎是你在找什么。

你认为“凌乱”是做到这一点的正确方法。嵌套它。如果你真的想要的话,你可以把插入放在一个单独的函数中,并在间隔内调用它。异步时间只在异步回调中有效,因此您可以在此工作。您可以将数据放入更高范围的数组中并将其存储在那里,但只在setInterval()回调中知道何时将值添加到数组中。

+0

这可能听起来很愚蠢,但如果我不需要知道数组值的时机。如何将数据传递给更高范围的数组,以便我的应用的其他部分可以使用这些生成的值? – Jambo

+0

@Jambo - 您可以'.push()'数据或以其他方式将其分配给更高范围的变量,并且它将位于更高范围内。你只是不知道什么时候可以从更高的范围使用它,除非你还有某种通知系统:callback,eventEmitter,promise等...通常,当新的人试图做到这一点时,他们正在编程错误,因为他们不理解异步时间。 – jfriend00

+0

所以一直在与承诺,回调和功能搞乱,以试图获得我想要的结果,并失败惨败(也如果这个问题不应该在这里,请让我知道)。目前,我的单个Node脚本正在为用户提供一个网页,然后使用WebSocket并设置间隔每秒推出一次数据,我应该将它分成两个脚本吗?一个从websocket服务器接收数据,然后每隔1分钟和5分钟将其插入到我的mongoDB中?或者我应该在客户端使用我的html页面来处理?对于异步编程道歉,我相当陌生 – Jambo

相关问题