返回承诺未按预期工作的函数

时间:2019-04-25 16:35:01

标签: javascript node.js asynchronous promise sequelize.js

我的代码中有这个Promise链,它工作得很好。文档实际上有一个值,并且不为空

...
.then(() => {
  return db.document.findOne({
    where: {
      id: _document.get('id', req.transaction)
    },
    include: [{
      model: db.documentChildren,
      attributes: ['id', 'reference', 'uri', 'contentType', 'type', 'page']
    },
    {
      model: db.tag,
      attributes: ['id', 'key', 'value'], // We don't want meta columns
      through: { attributes: [] } // Exclude join table
    }],
    transaction: req.transaction
  })
})
.then(document => {
    console.log('document = ', document)
    ...

现在,我想将该查询抽象为一个函数,以便可以重复使用。

我本以为这样会行得通,但是由于某些原因,文档始终为空,并且当我运行生成的查询时,它确实有结果。

为什么将此查询抽象为自己的函数时文档为空?

function findOneDocumentQuery (db, id, transaction) {
  return db.document.findOne({
    where: {
      id: id
    },
    include: [{
      model: db.documentChildren,
      attributes: ['id', 'reference', 'uri', 'contentType', 'type', 'page']
    },
    {
      model: db.tag,
      attributes: ['id', 'key', 'value'], // We don't want meta columns
      through: { attributes: [] } // Exclude join table
    }],
    transaction: transaction
  })
}

...
.then(() => {
  return findOneDocumentQuery(db, _document.get('id', req.transaction))       
})
.then(document => {
  console.log('document = ', document)
...

1 个答案:

答案 0 :(得分:2)

我认为findOneDocumentQuery的括号是错误的,应该是:

return findOneDocumentQuery(db, _document.get('id'), req.transaction);