【发布时间】:2015-02-19 05:59:15
【问题描述】:
我在我的node.js 应用程序中使用Sequelize 和PostgreSQL。我有两个具有一对一关系的表 - Customers 和 Users。
Customers 表中有外键 UserId。所以,我首先插入Users 表,然后然后 插入Customers,最后插入UserId。这是我的控制器代码:
var self = this;
async.each(data, function(row, callback) {
var userData = {
name: row.name,
/** **/
}
// self.User is User model
self.User.create(userData).then(function(user) {
console.log("[User.create] succeeded");
/** **/
// self.Model is Customer model
self.Model.create(cusData).then(function(customer) {
console.log("[Customer.create] succeeded");
/** **/
}).catch(function(err) {
throw err;
}); // EOL self.Model.create
}).catch(function(err) {
throw err;
}); // EOL self.User.create
callback();
}, function(err){
if (err) {
throw err;
}
}
我正在使用async.each() 同步循环 2 条记录的数组。当我插入两条记录时,控制台输出为:
[User.create] succeeded
[User.create] succeeded
[Customer.create] succeeded
[Customer.create] succeeded
我的预期是:
[User.create] succeeded
[Customer.create] succeeded
[User.create] succeeded
[Customer.create] succeeded
我认为这可能是异步编程中同步流的问题。我错了什么?我认为我正确地使用了回调。
【问题讨论】:
-
你是如何插入两条记录的?您可能会按顺序调用两次,这会在回调有机会触发之前开始两次插入。如果要按顺序完成完整插入,则需要在第一个回调的最后一个回调中开始第二个。
-
@DenisdeBernardy 啊...我使用节点模块Async.js 来循环记录。我更新了问题中的代码。
-
@DenisdeBernardy 可能是
callback()的错误调用?
标签: node.js postgresql asynchronous synchronous sequelize.js