我有主控(工作簿)和子级(WorkBookDataset)。我正在尝试更新主记录,同时(插入或更新或删除)子记录。除了不返回更新的子记录之外,一切正常。我知道我在指定“then”时做错了什么,并且由于它始终是异步操作,因此在子更新完成之前已经返回结果。
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,但仍然相同。任何帮助/指示都会有很大帮助!提前致谢!
最佳答案
您需要在 knex('workbookdataset').where('workbookid'
return
关于node.js - Nodejs Express knex主详细记录更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49391959/