我是否需要closures每个具有等待结果callback的方法?

我正在使用socket.io和MySQL数据库工作在一个nodejs服务器上,当我意识到数据在数据库检索速度缓慢的任何时候都可能改变。 比方说,例如,在每个套接字连接上,我想在发送X数据时查询数据库中的用户信息。

io.on('connection', function(socket) { console.log('User connected'); socket.on('fetchTable', function(data) { var number = data.number; database.getTable(number, function(error, result) { // We'll take it that result is constant for both: 1 socket.emit('fetchTableResult', result + number); }); }); }); 

如果2个用户同时连接(用户1的编号为1,用户2的编号为2),则用户1 用户2 之前请求数据库,但是对于用户1和处理的用户2的数据 ,数据库要返回的结果太慢第一 。 返回的数据会不同吗? 这两个用户都会得到'3'作为'fetchTableResult'数据吗? 现在套接字不会是用户2的套接字吗?

解?

 io.on('connection', function(socket) { console.log('User connected'); socket.on('fetchTable', function(data) { var number = data.number; (function(socket, number) { database.getTable(number, function(error, result) { // We'll take it that result is constant for both: 1 socket.emit('fetchTableResult', result + number); }); })(socket, number) }); }); 

如果是这样的话,如果在database.getTable ,我有另外一种方法,像获取一个网站的HTML内容将需要一些时间,我是否真的需要另一个封闭的内部?

例如:

 io.on('connection', function(socket) { console.log('User connected'); socket.on('fetchTable', function(data) { var number = data.number; (function(socket, number) { database.getTable(number, function(error, result) { // We'll take it that result is constant for both: 1 (function(socket, result) { // fetch website html data socket.emit('fetchTableResult', result + number); })(socket, result) }); })(socket, number) }); }); 

参考: https : //github.com/loverajoel/jstips/blob/gh-pages/_posts/en/2016-02-03-implementing-asynchronous-loops.md

我认为你的第一个例子应该正常工作。 看到这个例子:

 document.addEventListener("click", function(event) { var x = event.x; setTimeout(function() { console.log(x); }, 1000); });