前提
現在Nodejsを使用してJavascriptの勉強をしております。
クエリ文を実行して得た値を配列に格納したいのですが、非同期になってしまうため、繰り返し2週目以降のデータが格納されません。
DBのレコードはそれぞれ parent_id カラム(親レコードのidが格納してある)を持っており、子となるレコードは複数ある場合もあります。
実現したいこと
・Main.jsから受け取ったid(req.body.id)から末端の子要素のidを全て取得し、idArrayへ重複なく格納したい
該当のソースコード
javascript
1let idArray = []; //最終的にMain.jsに返す配列 2let resultTmp = 0; //繰り返し判定要素 3let parentIdArray = []; //親要素を格納する配列(forEach) 4 5parentIdArray.push(req.body.id); // Main.jsからpostで来た値を格納 6 7while (resultTmp.length !== 0) { 8 parentIdArray.forEach((parentId) => { 9 connection.query( 10 'SELECT id, folder_name, parent_id FROM folder WHERE parent_id = ?', 11 [parentId], 12 (error, results) => { 13 results.forEach((result) => { 14 //重複していなければ追加 15 if (idArray.indexOf(result.id) == -1) { 16 idArray.push(result.id); 17 } //重複していなければ追加 18 if (parentIdArray.indexOf(result.id) == -1) { 19 parentIdArray.push(result.id); 20 } 21 }); 22 //resultsが空であればWhile文終了 23 resultTmp = results; 24 } 25 ); 26 //一度parentIdArray.forEachで実行した配列要素は削除 27 parentIdArray.splice(parentIdArray.indexOf(parentId), 1); 28 }); 29} 30res.send({ response: idArray });
試したこと
asyncを使って非同期処理を同期的に処理をしようとしましたが、うまくいきませんでした。
どのようなコードを書けばよいかご教授お願いいたします。
回答1件
あなたの回答
tips
プレビュー