Node.js nodejs express knex主详细记录更新

Node.js nodejs express knex主详细记录更新,node.js,express,master-detail,knex.js,yield-return,Node.js,Express,Master Detail,Knex.js,Yield Return,我有主(工作簿)和子(工作簿数据集)。我正在尝试更新主记录,同时(插入、更新或删除)子记录。除了不返回更新的子记录外,一切正常。我知道我在指定“then”时做错了什么,因为它总是asyc操作,所以在子更新完成之前已经返回了结果 var Promise=require('bluebird'); 返回knex.transaction(功能(trx){ 返回knex('workbook')。其中('workbookid',workbook.workbookid)。和其中('userid',workb

我有主(工作簿)和子(工作簿数据集)。我正在尝试更新主记录,同时(插入、更新或删除)子记录。除了不返回更新的子记录外,一切正常。我知道我在指定“then”时做错了什么,因为它总是asyc操作,所以在子更新完成之前已经返回了结果

var Promise=require('bluebird');
返回knex.transaction(功能(trx){
返回knex('workbook')。其中('workbookid',workbook.workbookid)。和其中('userid',workbook.userid)
.更新(工作簿)
.then(函数(updateRecords){
return Promise.map(数据集、函数(数据集){
如果(dataset.workbookdatasetid&&dataset.workbookdatasetid==-1){
//除去
返回knex('workbookdataset')。其中('workbookid',workbook.workbookid')。和其中('datasetid',dataset.datasetid)
.delete();
}否则{
dataset.workbookid=工作簿.workbookid;
knex('workbookdataset')。其中('workbookid',workbook.workbookid')。和其中('datasetid',dataset.datasetid)
.then(函数(alreadyds){
如果(alreadyds.length==1){
//更新
返回knex('workbookdataset')。其中('workbookid',workbook.workbookid')。和其中('datasetid',dataset.datasetid)
.update(数据集)
}否则{
//插入
if(dataset.workbookdatasetid){
删除dataset.workbookdatasetid;
}                            
返回knex('workbookdataset')
.插入(数据集)
}
})   
}
});
})
})
.then(函数(updateRecords){
return get工作簿(workbook.userid,workbook.workbookid);//返回更新的工作簿信息,但不返回更新的workbookdataset信息

});
在您拥有
knex('workbookdataset')的行上,您需要一个
返回
。其中('workbookid'
请查看一个
。从knex返回
方法。它允许您从数据库返回插入/更新/删除的记录

另外,我建议您检查承诺链,确保在正确的位置返回正确的值

注意:这与问题无关,但如果您正在使用事务,请添加到您的查询
。transacting(trx)
,以便在一个事务中而不是单独运行它们

knex('workbook')
  .where('workbookid',workbook.workbookid)
  .andWhere('userid', workbook.userid)            
  .update(workbook)
  .returning('*')
  .transacting(trx)
  .then(data => {
     console.log(data) // => [{id: 1, workbookid: 1, userid: 981,...}, ...]
  })

你在用哪个数据库?哇!它工作了。真是太傻了。谢谢。(我用的是新身份证,他们不让我做标记作为答案)是的,明白了。谢谢。