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