【发布时间】:2016-01-09 04:35:22
【问题描述】:
我在 Node.js 中使用 socket.io 有这个服务器。 我有一个功能
function updatePoints(){
pool.getConnection(function(err, connection) {
connection.query("SELECT * FROM `users`", function(error, rows) {
//here it fetchs the users' points and emit to their respective sockets
});
connection.release();
});
}
好吧,当我在另一个函数中调用这个函数时,它似乎在它之前的代码之前运行。 这里:
function(){
connection.query('UPDATE `users` SET '...});
connection.query('UPDATE `users` SET '...});
updatePoints();
}
第二个功能是当用户向另一个人捐赠积分时,所以我减少捐赠者的积分并增加接收者的积分。 有趣的是,当函数被调用时,它会像我想要的那样为捐赠者发出信号。捐赠者看到他的积分实时更新,而在接收方他看不到它,除非对方第二次向他捐赠积分,然后他才能看到第一次捐赠正在进行。如果该函数在 if should 之前运行,我该如何使其工作?
【问题讨论】:
-
很难理解您需要帮助解决什么问题,但似乎您可能不了解异步操作在 Javascript 中的工作原理。它们稍后完成,但顺序中的其他代码继续运行。如果你想对异步事物进行排序,你不能像在上一个代码块中那样做。
-
@jfriend00 所以没有简单的方法来实现我想要的吗?我的意思是,更新数据库上的 2 条记录,然后运行获取所有数据的函数?
-
正确的异步编程并不难。如果您在问题中准确描述了您想要完成的工作,我可以写一个答案来说明如何做到这一点。您的问题没有明确说明您的目标是什么 - 它所描述的只是您遇到的一些问题,所以我不确定该针对您的问题推荐什么。而且,试图教授异步编程的整个主题而不关注您的特定问题是一个太大的主题,无法回答。
-
好的,如您所见,我进行了两次更新以更改用户在数据库中的点,然后我调用函数 updatePoints() 获取数据库上的点并发送给客户端,但似乎该函数在更改之前获取点。我希望它在 UPDATE 查询完成/完成后实际查询数据库。对不起,如果我的解释不好,但我的英语太差了。谢谢先生@jfriend00
标签: javascript node.js socket.io