Sequelize.js save()结果

lee*_*sin 8 node.js sequelize.js

像这样的代码:

(function () {
    var tag = models.Tag.build({ create_time: new Date(), is_hot: '0', is_lock: '0', name: 'Nodejs' });
    tag.save();
    console.log(tag.dataValues);
    tag.name = "npm";
    tag.save();
    console.log(tag.dataValues);
    tag = models.Tag.build({ create_time: new Date(), is_hot: '0', is_lock: '0', name: 'webpack' });
    tag.save();
    console.log(tag.dataValues);
})();
Run Code Online (Sandbox Code Playgroud)

结果是: 结果

在我的第一眼中,结果可能是:

Executing (default): INSERT INTO `t_tag` (`id`,`name`,`create_time`,`is_hot`,`is_lock`,`is_delete`) VALUES (NULL,'Nodejs','2016-12-23 03:09:23','0','0','0');
Executing (default): INSERT INTO `t_tag` (`id`,`name`,`create_time`,`is_hot`,`is_lock`,`is_delete`) VALUES (NULL,'npm','2016-12-23 03:09:23','0','0','0');
Executing (default): INSERT INTO `t_tag` (`id`,`name`,`create_time`,`is_hot`,`is_lock`,`is_delete`) VALUES (NULL,'webpack','2016-12-23 03:09:26','0','0','0');
Run Code Online (Sandbox Code Playgroud)

是什么原因造成的?为什么“ npm”记录插入两次时间?

dmf*_*fay 5

Sequelize 函数异步运行。save返回一个 Promise,您可以.then()关闭该 Promise 以确保在 SQL 调用完成后能够执行。由于您没有这样做,因此save当您更改tag.name为“npm”时,第一个尚未持续存在,因此“npm”被插入两次(请注意console.log在其他任何事情发生之前所有三个调用是如何执行的 - 这是您的另一个迹象没有正确执行异步)。修复你的流程控制以与承诺一起工作,你就不会遇到这个问题了。