2013-10-07 2 views
1

Если у меня есть запрос MySQL, который возвращает значение, которое будет использоваться снова в предложении WHERE, будет ли это работать с асинхронным потоком выполнения Node.js?Node.js поток выполнения запросов MySQL

Как правило, это может быть:

SELECT 
customerId FROM Customers 
WHERE customerName=nikolas 

Тогда результат будет храниться так:

var customerId = customerId 

И повторно в другом запросе:

SELECT 
orderId FROM Orders 
WHERE customerId=customerId 

Будет ли это выборки me orderId клиента Nikolas, который был возвращен в первом запросе?

Будут ли выполняться последовательные запросы?

ответ

1

Это действительно зависит от модуля, который вы используете. Один из наиболее часто используемых драйверов, node-mysql, является асинхронным, поэтому код не будет запускаться последовательно. Вместо этого, вы должны использовать обратные вызовы:

var query1 = 'SELECT customerId FROM Customers WHERE customerName = nikolas'; 
var query2 = 'SELECT orderId FROM Orders WHERE customerId = '; 

connection.connect(); 
connection.query(query1, function(err, rows, fields) { 
    var customerId = rows[0].customerId; 
    connection.query(query2 + customerId, function(err, rows, fields) { 
    connection.end(); 
    // results are here 
    }); 
}); 

В Node.js, обычно требуется писать асинхронный код. Вероятно, есть где-то синхронный модуль драйверов MySQL, но большинство из них не имеют случая, когда они захотят блокировать свой процесс синхронным вызовом базы данных.

+0

Синхронное значение последовательно, я бы считал ... верно? –

Смежные вопросы