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


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

実現したいこととしては、Main.jsから受け取ったid(req.body.id)から末端の子要素のidを全て取得し、idArrayへ重複なく格納したいです。  
どのようなコードを書けばよいかご教授お願いいたします。

[code]

    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 });
    
[/code]




今回はPromiseなどを使用せずとも下記で実行できたため、自己解決とさせていただきたいと思います。

[code]

    connection.query('select * from folder', (error, results) => {
            console.log(results);
             while (parentIdArray.length !== 0) {
              parentIdArray.forEach((parentId) => {
                results.forEach((result) => {
                  if (parentId == result.parent_id) {
                    console.log(`id : ${result.id}`);
                    //重複していないなら格納する
                    if (idArray.indexOf(result.id) == -1) {
                      idArray.push(result.id);
                    }
                    if (parentIdArray.indexOf(result.id) == -1) {
                      parentIdArray.push(result.id);
                    }
                  }
                });
                parentIdArray.splice(parentIdArray.indexOf(parentId), 1);
              });
            }
            res.send({ response: idArray });
          });
    
[/code]

