Node.js и node-mysql DB Query - нужна синхронная помощь по коду - PullRequest
1 голос
/ 20 мая 2011

Я пишу некоторый помощник не веб-приложения и столкнулся с необходимостью синхронного вызова запроса.

По сути, в цикле мне нужно проверить базу данных, чтобы увидеть, существует ли значение. Если это не так, введите значение. В настоящее время с помощью node-mysql я могу заставить его работать только с обратным вызовом. Из-за этого, node.js обрабатывает вызов как асинхронный и продолжает обрабатывать мой запрос до его завершения. Это большая проблема, потому что в конце она может вставлять дубликаты, потому что они были в очереди.

Идеальное решение - не работает. Результаты на самом деле являются объектом клиента, и я не могу найти фактические результаты внутри. Однако это делает его синхронным.

results = client.query('SELECT COUNT(md5) as md5Count FROM table WHERE md5 = "' + md5 + '"')

Следующее не работает. Node.js обрабатывает его как асинхронный, а externalResult по-прежнему является объектом клиента.

outerResult = client.query('SELECT COUNT(md5) as md5Count FROM board WHERE md5 = "' + md5 + '"',  function  selectCb(err, results, fields) {console.log(results);});

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 20 мая 2011

По сути, в цикле мне нужно проверить базу данных, чтобы увидеть, существует ли значение. Если это не так, введите значение.

Эта проблема лучше всего подходит для SQL. Вы не решаете эту проблему, повторно обращаясь к базе данных, вы решаете эту проблему, вставляя SQL-запрос только там, где значение индекса еще не существует.

INSERT INTO mytable ( name, address ) 
SELECT @name, @address FROM DUAL 
WHERE NOT EXISTS (SELECT * FROM mytable WHERE name = @name, address = @address)

Это супер упрощенный пример, и не самый оптимизированный. Вы можете сделать то же самое здесь с наборами данных вместо записи за записью, если хотите.

1 голос
/ 20 мая 2011

По сути, в цикле мне нужно проверить базу данных, чтобы увидеть, существует ли значение.Если это не так, введите значение.В настоящее время с помощью node-mysql я могу заставить его работать только с обратным вызовом.Из-за этого, node.js обрабатывает вызов как асинхронный и продолжает обрабатывать мой запрос до его завершения.Это большая проблема, потому что, в конце концов, это может быть вставка дубликатов, потому что они были в очереди.

Существует асинхронное решение, всегда есть.

в основном вы беспокоитесь, чтомогут быть введены повторяющиеся записи.

Полагаю, у вас есть массив данных для циклического прохождения.Ваша проблема решена с помощью _.uniq или другого фильтрационного решения.

Поэтому вы просто звоните _.uniq(md5s).forEach(function() { })

...