【问题标题】:Using Sequelize with ES6 Promises?将 Sequelize 与 ES6 Promises 一起使用?
【发布时间】:2017-02-21 14:20:58
【问题描述】:

我正在使用 Sequelize 连接到 Postgres 数据库。我有这个代码:

return Promise.resolve()
    .then(() => {
        console.log('checkpoint #1');
        const temp = connectors.IM.create(args);
        return temp;
    })
    .then((x) => console.log(x))
    .then((args) =>{
        console.log(args);
        args = Array.from(args);
        console.log('checkpoint #2');
        const temp = connectors.IM.findAll({ where: args }).then((res) => res.map((item) => item.dataValues))
            return temp;
        }
    )
    .then(comment => {
        return comment;
    })
    .catch((err)=>{console.log(err);});

在检查点#1 的第一个 .then 块中,新记录已成功添加到 Postgres 数据库。在下一个 then 块中的 console.log(x) 中,这将被记录到控制台:

{ dataValues: 
{ id: 21,
  fromID: '1',
  toID: '2',
  msgText: 'Test from GraphIQL',
  updatedAt: Wed Oct 12 2016 09:52:05 GMT-0700 (PDT),
  createdAt: Wed Oct 12 2016 09:52:05 GMT-0700 (PDT) },
_previousDataValues: 
{ fromID: '1',
  toID: '2',
  msgText: 'Test from GraphIQL',
  id: 21,
  createdAt: Wed Oct 12 2016 09:52:05 GMT-0700 (PDT),
  updatedAt: Wed Oct 12 2016 09:52:05 GMT-0700 (PDT) },
_changed: 
{ fromID: false,
  toID: false,
  msgText: false,
  id: false,
  createdAt: false,
  updatedAt: false },
'$modelOptions': 
{ timestamps: true,
  instanceMethods: {},
  classMethods: {},
  validate: {},
  freezeTableName: false,
  underscored: false,
  underscoredAll: false,
  paranoid: false,
  rejectOnEmpty: false,
  whereCollection: null,
  schema: null,
  schemaDelimiter: '',
  defaultScope: {},
  scopes: [],
  hooks: {},
  indexes: [],
  name: { plural: 'IMs', singular: 'IM' },
  omitNul: false,
  sequelize: 
   { options: [Object],
     config: [Object],
     dialect: [Object],
     models: [Object],
     modelManager: [Object],
     connectionManager: [Object],
     importCache: {},
     test: [Object],
     queryInterface: [Object] },
  uniqueKeys: {},
  hasPrimaryKeys: true },
'$options': 
{ isNewRecord: true,
  '$schema': null,
  '$schemaDelimiter': '',
  attributes: undefined,
  include: undefined,
  raw: undefined,
  silent: undefined },
hasPrimaryKeys: true,
__eagerlyLoadedAssociations: [],
isNewRecord: false }

在检查点 #2 的 .then((args) => 代码块中,args 以未定义的形式出现。

如何让 args 包含来自检查点 #1 的结果数组?

【问题讨论】:

    标签: node.js ecmascript-6 sequelize.js es6-promise apollo


    【解决方案1】:
    .then((x) => console.log(x))
    .then((args) =>{
    

    就像在做

    .then((x) => {
        console.log(x);
    
        return undefined;
    })
    .then((args) =>{
    

    因为console.log 返回undefined。这意味着undefined 值将传递给下一个.then

    最简单的方法是明确

    .then((x) => {
        console.log(x);
    
        return x;
    })
    

    或者在更短的版本中使用逗号操作符

    .then((x) => (console.log(x), x))
    

    【讨论】:

      猜你喜欢
      • 2016-09-24
      • 1970-01-01
      • 2017-08-23
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 2020-04-17
      • 1970-01-01
      相关资源
      最近更新 更多