【发布时间】:2018-03-20 18:43:25
【问题描述】:
我有主(工作簿)和子(工作簿数据集)。我正在尝试更新主记录并同时(插入或更新或删除)子记录。一切正常,只是它没有返回更新的子记录。我知道我在指定 'then' 时做错了,并且由于它始终是 asyc 操作,因此在子更新完成之前已经返回了结果。
var Promise = require('bluebird');
return knex.transaction(function(trx) {
return knex('workbook').where('workbookid',workbook.workbookid).andWhere('userid', workbook.userid)
.update(workbook)
.then(function(updatedrecords) {
return Promise.map(datasets, function(dataset) {
if(dataset.workbookdatasetid && dataset.workbookdatasetid == -1){
//remove
return knex('workbookdataset').where('workbookid',workbook.workbookid).andWhere('datasetid', dataset.datasetid)
.delete();
} else {
dataset.workbookid = workbook.workbookid;
knex('workbookdataset').where('workbookid',workbook.workbookid).andWhere('datasetid', dataset.datasetid)
.then(function(alreadyds) {
if(alreadyds.length == 1){
//update
return knex('workbookdataset').where('workbookid',workbook.workbookid).andWhere('datasetid', dataset.datasetid)
.update(dataset)
}else{
//insert
if(dataset.workbookdatasetid){
delete dataset.workbookdatasetid;
}
return knex('workbookdataset')
.insert(dataset)
}
})
}
});
})
})
.then(function(updatedrecords) {
return getWorkBook(workbook.userid, workbook.workbookid); //this returns updated workbook information, but not updated workbookdataset information
});
我尝试将 then() 放入 Promise,但还是一样。任何帮助/指针都会有很大的帮助!提前致谢!
【问题讨论】:
-
您使用的是哪个数据库?
标签: node.js express master-detail knex.js yield-return