Sequelize-创建实例后不返回承诺

Posted

技术标签:

【中文标题】Sequelize-创建实例后不返回承诺【英文标题】:Sequelize- Not return promise after create an instarnce 【发布时间】:2016-12-05 16:24:58 【问题描述】:

我正在尝试创建新过滤器并打印 (console.log) 刚刚创建的对象的 id,但它没有进入 .then 函数。 代码如下:

var Sequelize = require('sequelize');
var FilterModel = require('../models/filters');
var Filter = new FilterModel(Database, Sequelize);

Filter.create( name: data.filter_name ).then(function(filter) 
  console.log( '***************************************' );
);

并且'**'没有打印,但条目在数据库中。

当我尝试这样做时:

var filter = Filter.create( name: data.filter_name )

并打印“过滤器”,我得到了带有 created_at 等的新实例,但 id 为 NULL。

id定义为:

id: 
    allowNull: false,
    autoIncrement: true,
    primaryKey: true,
    type: Sequelize.INTEGER
  ,

请有人帮忙看看这里出了什么问题?

谢谢!

【问题讨论】:

你确定 Filter.create() 返回一个 promise 或者至少是一个 thenable 对象吗?如果是这样,promise 可能刚刚返回被拒绝,因此您可以尝试添加第二个函数来捕获拒绝的结果。 你的 new FilterModel() 应该返回 Sequelize.define() 对象 @TilekbekovYrysbek 我已经在模型中定义了。 【参考方案1】:

其实就是输入到'then'并打印控制台。

它绕过 'then' 转到下一行,然后返回(在 promise 完成后),返回 'then' 函数。

我调试它并在之后添加了console.log

Filter.create( name: data.filter_name ).then(function(filter) 
 console.log( '***************************************' );
);
console.log('after')

所以现在,它打印 'after' 然后打印'******'

还是谢谢。

【讨论】:

这段代码与您的问题有何不同?

以上是关于Sequelize-创建实例后不返回承诺的主要内容,如果未能解决你的问题,请参考以下文章

使用 Typescript 在 Sequelize 模型中创建实例方法

在 Express.js 中停止执行 Sequelize 承诺

续集expressjs中的事务未执行

Sequelize beforeConnect 钩子与 sequelize-typescript 未运行

更改数据库模型 - Sequelize

Sequelize 不返回 queryAsync 对象