node.js - Nodejs Express knex主详细记录更新

标签 node.js express master-detail knex.js yield-return

我有主控(工作簿)和子级(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/

相关文章:

json - 使用 post 方法将新数据添加到服务器不起作用。使用 Reactjs 和 Nodejs

node.js - body-parser 对 express 有什么作用?

node.js - res.json() 和 res.end() 之间的性能差异

javascript - 我们可以在服务器的 Node 模块中提供静态文件吗?

ios - 如何更新详细 View

javascript - Node.js - 确保非阻塞调用完成

node.js - 动态更新nodejs cronjob周期

node.js - 将数据从 angular 发送到 Node api

ios - iPad UISplitViewController : Expand master instead of detail full screen?

asp.net-mvc - 在同一页面上创建新的父级和子级