Async和Knex:它们是如何工作的?

时间:2015-11-24 14:52:11

标签: mysql node.js asynchronous

我解析一个json对象,对于每个元素,我需要执行很多查询。 首先,选择"选择"查询并根据结果执行插入或更新。 我想使用async.js和knex.js 它执行顺序的问题不是搜索顺序

            async.each(newContent,function(e){
                //var e=JSON.stringify(element),
                    var z=-1,
                        devicepresenceId = e.device_presence_id;
                //console.log(e);
                async.waterfall([
                    function(cb) {
                        knex('jos_joomrh_event_employee_hours_presence')
                            .whereRaw('device_presence_id=?', devicepresenceId)
                            .select('id', 'applied_at', 'applied_at_end')
                            .debug()
                            .then(function (rows) {
                                console.log(rows);
                                z = _.keys(rows).length;
                                console.log('rows0', z);
                                cb(null,z);
                            })
                            .catch(function (e) {
                                console.log(e)
                                reject(e)
                            })
                        cb(null,z);
                    },
                    function(z,cb){
                        console.log('z',z);
                        if (parseInt(z)==0)
                        {
                            console.log('insertHoursPresence');
                            //insertHoursPresence(e)
                        }
                        else{
                            console.log('updateHoursPresence');
                            //updateHoursPresence(e)
                        }
                        cb(null,'two')
                    }
                ],
                function(err,z){
                    if(err)console.log(err);
                    console.log(z);
                }
                )}
            )}

事实上;它执行第二个函数和cb函数以及第一个函数后用knex: 谢谢你的帮助 Mdouke

1 个答案:

答案 0 :(得分:0)

在knex部分,你打电话给" cb(null,z)",你必须"移动"在catch函数内部调用(但替换reject(e)部分)。你的问题是你在knex之外调用cb()函数,当然它是立即独立于knex结果调用的)