【发布时间】:2014-02-08 10:10:33
【问题描述】:
我用Meteor._wrapAsync 包装了一个函数writeTransaction(),并在编写MySQL 事务的for 循环中调用了它5 次。
但是从MySQL查询日志来看,循环的下一次迭代似乎是在上一个循环中的函数writeTransactionSync()完成之前执行的。
如果Meteor._wrapAsync不让函数阻塞,怎么才能让函数同步呢?
服务器端代码
writeTransaction = function(data, callback) {
var mysql = Meteor.require('mysql')
var connection = mysql.createConnection(info).connect()
connection.beginTransaction(Meteor.bindEnvironment(function(err) {
connection.query('DELETE FROM orders WHERE _id = ?', [data._id], Meteor.bindEnvironment( function(err) {
connection.commit( Meteor.bindEnvironment( function(err) {
}))
}))
}))
callback(null)
}
writeTransactionSync = Meteor._wrapAsync(writeTransaction)
for(var i=0; i<5; i++) {
writeTransactionSync(data[i])
}
MySQL 查询日志
329 Connect root@localhost on meteor
330 Connect root@localhost on meteor
331 Connect root@localhost on meteor
332 Connect root@localhost on meteor
333 Connect root@localhost on meteor
329 Query START TRANSACTION
330 Query START TRANSACTION
331 Query START TRANSACTION
332 Query START TRANSACTION
333 Query START TRANSACTION
329 Query DELETE FROM orders WHERE _id = '34zCYZXBxEkJapkYh'
330 Query DELETE FROM orders WHERE _id = 'SNR8zTEzGCw6X7RZ2'
331 Query DELETE FROM orders WHERE _id = 'TAF2TJkN5LzFRqAnX'
332 Query DELETE FROM orders WHERE _id = '57pJbvFYmHTpM5E6a'
333 Query DELETE FROM orders WHERE _id = 'BtNLGa3gjRGAfmMFf'
331 Query COMMIT
332 Query COMMIT
329 Query COMMIT
330 Query COMMIT
333 Query COMMIT
【问题讨论】:
标签: javascript mysql node.js meteor