プロジェクトにnode.js、express、postgresdbを使用しています。シーケンスで実行できない非同期関数のクエリがほとんどありません。参考のためのサンプルコード。
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
上記のコードでは、条件が失敗した場合、else部分がasync.series関数の最後で実行されます。条件が成功する限り、すべてが順番に完全に機能します。ネストされたデータベースクエリを順番に実行する方法は?async.waterfallを使用しましたが、それでも期待される出力はありません。
更新:(解決済み)
ネストされたクエリ関数を使用する代わりに、ネストを削除し、期待される結果を取得して実行シーケンスを維持できるように、単一のクエリを準備しました。
あなたは本当にasync / awaitを使うべきです。サポートの約束のlib PG、あなただけのこの操作を行うことができますので。
for(let i=0;i<person_size;i++) {
const result = await dbClient.query(check_person_query);
if(result.rows.length <= 0) {
await dbClient.query(insert_person_query);
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加