Sequelize 4:使用原生ES6承诺而不是Bluebird承诺

时间:2018-01-16 07:56:24

标签: javascript typescript sequelize.js es6-promise bluebird

可以配置sequelize,以便它使用原生的es6 promise而不是bluebird副本吗?

根据他们的docs和续集4,他们正在使用蓝鸟的独立副本。但我想使用原生的es6承诺。

示例代码:

public find(selector: object): Promise<ClientEntity[]> {
  // Client is of type Model<ClientModel>; see sequelize-typescript
  return ClientModel.findAll(selector)
    .then(res => res.map(e => e.toJSON()))
    .catch(err => console.warn('PgClientModel#find', err));
}

显示以下错误:Type 'Bluebird<void | any[]>' is not assignable to type 'Promise<ClientEntity[]>'. Property '[Symbol.toStringTag]' is missing in type 'Bluebird<void | any[]>'

我现在看到的选项:

  1. 使用蓝鸟
  2. 在蓝鸟的thencatch区块中,我可以通过原生es6承诺resolvereject。但实际上我并不喜欢这个想法。
  3. 我正在使用以下软件包

    "sequelize": "^4.31.2",
    "sequelize-typescript": "^0.6.2",
    "typescript": "^2.6.2"
    

    编辑:通过将返回类型更改为PromiseLike来解决。

2 个答案:

答案 0 :(得分:1)

你试过这个设置:

Sequelize.Promise = global.Promise

答案 1 :(得分:1)

我认为当前版本无法实现。似乎该库用Bluebird库的实例替换了Promise关键字。

// @请参见此处 https://github.com/sequelize/sequelize/blob/fa587acc050b06db6ef6b69355f7d9350d6c01da/lib/promise.js#L3