javascript - 什么时候是数据库插入的关键部分?

标签 javascript node.js sequelize.js

这是我使用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/

相关文章:

javascript - 有没有一种方法可以使用 JavaScript 添加帮助气泡

javascript - 如何从文本输入字段读取输入并将输入放入div

node.js - 我越来越无法读取未定义的属性 'query'

node.js - 当没有新事件排队时,node.js 应用程序如何保持运行?

javascript - 如何处理哪个子进程获得 socket.io 套接字句柄

javascript - Javascript 事件队列是否是一个简单的 FIFO?

javascript - 模板化中的自定义计算函数 `<template>`

node.js - 如何在Node.js中使用服务层

node.js - 在嵌套的条件包括进入内部连接的情况下进行 Sequelize

migration - Sequelize - 使用索引和约束重命名列