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() { })