简体   繁体   中英

Query inside foreach Node.js Promis

i put query inside for each on promise. I am trying to query a mysql database twice, the second time, multiple times for each result from the first time but I am unable to work out how to wait for the result from the second query before continuing

i want the output like this :

{
   "data":[
      {
         "name":"Title result",
         "images":[
            {
               "id":1,
               "place_id":705,
               "path_image":"http://3.bp.blogspot.com/-iwF-ImFpzvk/T6fKhC6F7YI/AAAAAAAAARA/FyKpNcDsP8M/s1600/asd2e1.jpg"

            },
            {
               "id":2,
               "place_id":705,
               "path_image":"https://asrt.bp.com/data/photo/2014/07/22/sddrfr2.jpg",
            }
         ]
      }
   ]
}

but i get only like this :

{
   "data":[
      {
         "name":"Title result",
         "images":[]
}

and this is my code:

return new Promise((resolve, reject) => {
                const { connection, errorHandler } = deps;
                let arrayData = [];
                let imageData = [];

                connection.query(
                    "SELECT * FROM places WHERE id = 705",
                    (error, rows, results) => {
                        rows.forEach((row) => {
                            connection.query(
                                "SELECT * FROM place_gallery WHERE place_id = 705",
                                (error, rows, results) => {
                                    imageData = rows;

                                }
                            )
                            arrayData.push({ name: row.title, images: imageData })


                        });

                        if (error) {
                            errorHandler(error, "failed", reject);
                            return false;
                        }
                        resolve({ data: arrayData });

                    }
                );

            })
        },

how to solve this?

try this, another way instated of creating dbcall function you can convert the query callback to promise using util.promisify()

const dbcall = (query) => {
    return new Promise((resolve, reject) => {
        connection.query(
            query,
            (error, rows, results) => {
                if (error) return reject(error);
                return resolve(rows);
            });
    });
};

const somefunc = async () => {
    const {
        connection,
        errorHandler
    } = deps;
    let arrayData = [];
    try {
        const rows = await dbcall("SELECT * FROM places WHERE id = 705");
        rows.forEach(async (row) => {
            const imageData = await dbcall("SELECT * FROM place_gallery WHERE place_id = 705");
            arrayData.push({
                name: row.title,
                images: imageData
            });
        });
    } catch (error) {
        console.log(error);
    }
    return arrayData;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM