foreach node.js promis内部查询

2ic8powd  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(241)

我把每一个问题都放进去了。我试图查询一个mysql数据库两次,第二次,从第一次的每个结果多次,但我无法解决如何等待第二次查询的结果,然后再继续
我想要这样的输出:

{
   "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",
            }
         ]
      }
   ]
}

但我只能这样:

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

这是我的密码:

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 });

                    }
                );

            })
        },

如何解决这个问题?

wrrgggsh

wrrgggsh1#

试试这个,另一种创建dbcall函数的方法,您可以使用 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;
}

相关问题