gpt4 book ai didi

node.js - Sequelizejs 模型创建回调未同步运行?

转载 作者:行者123 更新时间:2023-12-03 22:29:26 25 4
gpt4 key购买 nike

我在我的 Sequelize 应用程序中使用 PostgreSQLnode.js。我有两个具有一对一关系的表 - CustomersUsers
UserId 表中有外键 Customers。所以,我首先插入到 Users 表和 然后 插入到 Customers 与最后插入的 UserId 。这是我的 Controller 代码:

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

我认为这可能是异步编程中同步流程的问题。我怎么了?我想我正确地使用了回调。

最佳答案

您异步启动两个插入,因此您无法保证后续查询的顺序。据您所知,根据锁,您可以获得当前或预期的结果。

要强制顺序,请从内部回调中向前移动迭代:

  self.Model.create(cusData).then(function(customer) {
console.log("[Customer.create] succeeded");
/** move the iterator forward here, using e.g. recursion **/
})

关于node.js - Sequelizejs 模型创建回调未同步运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27580617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com