Node.js和node-mysql数据库查询 – 需要同步代码的帮助
我正在写一些非Web应用程序助手,并遇到了一个同步查询调用的需要。
基本上,在一个循环内,我需要检查数据库,看看值是否存在。 如果没有,则插入值。 目前,在node-mysql中,我只能使用callback来工作。 因此,node.js将该调用视为asynchronous,并在查询完成之前继续处理我的请求。 这是一个很大的问题,因为最后它可能会插入重复项,因为它们在队列中。
理想的解决scheme – 不起作用。 结果实际上是客户端的对象,我无法find其中的实际结果。 但是,这确实使其同步。
results = client.query('SELECT COUNT(md5) as md5Count FROM table WHERE md5 = "' + md5 + '"')
以下不起作用。 Node.js将其视为asynchronous,而outerResult仍然是客户端的对象。
outerResult = client.query('SELECT COUNT(md5) as md5Count FROM board WHERE md5 = "' + md5 + '"', function selectCb(err, results, fields) {console.log(results);});
任何帮助表示赞赏。
基本上,在一个循环内,我需要检查数据库,看看值是否存在。 如果没有,则插入值。
这是SQL最好的一个问题。 您不反复通过与数据库交谈来解决这个问题,您可以通过让SQL仅插入索引值不存在的地方来解决此问题。
INSERT INTO mytable ( name, address ) SELECT @name, @address FROM DUAL WHERE NOT EXISTS (SELECT * FROM mytable WHERE name = @name, address = @address)
这是一个超级简化的例子,而不是最优化的。 如果你愿意的话,你可以用数据集来做同样的事情,而不是logging。
基本上,在一个循环内,我需要检查数据库,看看值是否存在。 如果没有,则插入值。 目前,使用node-mysql,我只能使用callback工作。 因此,node.js将该调用视为asynchronous,并在查询完成之前继续处理我的请求。 这是一个很大的问题,因为最后它可能会插入重复项,因为它们在队列中。
有一个asynchronous解决scheme,总是有的。
基本上你担心可以input重复的条目。
我认为你有一个数组循环。 你的问题是通过_.uniq
或其他一些filter解决scheme解决的。
所以你只需调用_.uniq(md5s).forEach(function() { })