[Nodejs]MySQLのクエリ文の繰り返し処理を同期的に実行したい

前提

現在Nodejsを使用してJavasciptの勉強をしております。
クエリ文を実行して得た値を配列に格納したいのですが、非同期になってしまうため、繰り返し2週目以降のデータが格納されません。
DBのレコードはそれぞれ parent_id カラム(親レコードのidが格納してある)を持っており、子となるレコードは複数ある場合もあります。

実現したいこと

・Main.jsから受け取ったid(req.body.id)から末端の子要素のidを全て取得し、idArrayへ重複なく格納したい

該当のソースコード

javascript

let idArray = []; //最終的にMain.jsに返す配列let resultTmp = 0; //繰り返し判定要素let parentIdArray = []; //親要素を格納する配列(forEach) parentIdArray.push(req.body.id); // Main.jsからpostで来た値を格納 while (resultTmp.length !== 0) { parentIdArray.forEach((parentId) => { connection.query( 'SELECT id, folder_name, parent_id FROM folder WHERE parent_id = ?', [parentId], (error, results) => { results.forEach((result) => { //重複していなければ追加 if (idArray.indexOf(result.id) == -1) { idArray.push(result.id); } //重複していなければ追加 if (parentIdArray.indexOf(result.id) == -1) { parentIdArray.push(result.id); } }); //resultsが空であればWhile文終了 resultTmp = results; } ); //一度parentIdArray.forEachで実行した配列要素は削除 parentIdArray.splice(parentIdArray.indexOf(parentId), 1); });}res.send({ response: idArray });

試したこと

asyncを使って非同期処理を同期的に処理をしようとしましたが、うまくいきませんでした。
どのようなコードを書けばよいかご教授お願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

コメントを投稿

0 コメント