【发布时间】:2018-11-25 05:30:48
【问题描述】:
我在我的项目中使用 node.js、express 和 postgres db。我在异步函数中有几个查询,我无法按顺序执行。示例代码供参考。
for(let i=0;i<person_size;i++)
{
var check_person_query="select per_id_pk from person_tbl where per_fname='"+person_fname[i]+"' and per_lname='"+person_lname[i]+"'";
dbClient.query(check_person_query,function(err,result){
if(result.rows.length>0)
{
console.log("Call: 1.1");
console.log("person already exists");
}
else
{
var insert_person_query = "insert into person_tbl (per_fname,per_lname,per_gender,profile_photo) values('"+person_fname[i]+"','"+person_lname[i]+"','"+person_gender[i]+"','profile_photo_link')";
//console.log("query2: "+insert_person_query);
dbClient.query(insert_person_query,function(err,result){
if (err) throw err;
console.log("Call: 1.2");
console.log("New person has been added");
});
var fullname = person_fname[i].concat(person_lname[i]);
low_fullname = fullname.toLowerCase();
person_pic[i].mv("/home/aniket/content_info/images/"+low_fullname+".jpg", function(err){
if (err) throw err;
});
}
});
}//end for
在上面的代码中,当 if 条件失败时,else 部分会在我的 async.series 函数的最后执行。只要条件成功,一切都会按顺序完美运行。如何顺序运行嵌套的数据库查询?我使用了 async.waterfall 但仍然没有预期的输出。
更新:(已解决)
我没有使用嵌套查询函数,而是删除了嵌套,并准备了单个查询,以便获得预期的结果并保持执行顺序。
【问题讨论】:
-
你总是可以使用 promises 和 async/await,后者自然适用于循环。
标签: node.js postgresql express async.js