我解析一个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
答案 0 :(得分:0)
在knex部分,你打电话给" cb(null,z)",你必须"移动"在catch函数内部调用(但替换reject(e)部分)。你的问题是你在knex之外调用cb()函数,当然它是立即独立于knex结果调用的)