这是我使用sequelize插入数据库的代码。
insertUser: function() {
User.build({
firstName: 'John'
}).save().then(newUser => {
const race = Race.build({
name: 'Spa'
});
race.setUser(newUser);
race.save();
});
}
我仍然不熟悉异步/同步 javascript 关键部分。在这里,我在插入用户后使用 Promise,这样我就能够获取他的 id,从而能够使用他的属性创建一个竞赛。之后,我在保存之前从竞赛中构建并设置外键。
我的问题是:我应该在race.save()之前放置一个新的Promise,以等待外键属性在保存之前设置完毕,并避免在没有外键的情况下保存可能的竞赛?或者这里是 .then( 上的所有内容,将连续运行?为什么?
谢谢:)
最佳答案
让我们使用您的代码来解决问题:
User.build({
firstName: 'John'
}).save().then(newUser => {
const race = Race.build({
name: 'Spa'
});
console.log("2");
race.setUser(newUser);
console.log("3")
race.save().then(race => {
console.log("5");
});
console.log("4");
});
console.log("1")
每当您执行异步操作(例如访问数据库)时, Node 都会继续执行,而不是等待操作完成(阻止),以免浪费可用于执行其他操作的周期。在上面的示例中,我们有多个 save() 调用。在我们到达第二个 console.log 之前,我们进行了保存,这意味着 Node 将继续并在最底部记录第一条消息。 save() 调用完成后,它会继续执行 then() block 。由于 setUser 不是异步的,因此它将设置用户,然后打印 3。当我们再次调用 save 时,我们将再次访问数据库,并在继续打印 5 之前打印 4。
关于javascript - 什么时候是数据库插入的关键部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48573670/