gpt4 book ai didi

javascript - 格式化响应对象 - Sequelize ORM。循环内的异步函数

转载 作者:行者123 更新时间:2023-11-30 20:01:09 25 4
gpt4 key购买 nike

exports.getAllProducts = async () => {
const query = "some mysql query";
products = await db.sequelize.query(query, { type: sequelize.QueryTypes.SELECT });
var result = new Array();
products.forEach(product => {
result.push({
//'isLiked': helpers.isLiked(req.user.id, product.productId),
'productId': product.productId,
'product_price': product.product_price,
'product_name': product.product_name,
'shop_name': product.shop_name,
'shop_picture': product.shop_picture,
'product_image': product.product_image,
'num_comments': product.num_comments,
})
});
return result;
}

在我的 Node.js 项目中,我使用 Sequelize 作为 ORM。但有时我想使用原始查询,但我已经解决了这个问题。查询完成后,我将使用 forEach 函数对其进行循环。对于每次迭代,我想调用另一个异步函数(检查注释代码)并将返回值作为值放入 isLiked 中,一旦它完成所有循环 - 将数组作为响应发回。注意:异步函数是另一个数据库函数,它检查数据库中的某个值。

这里的问题我猜是因为我正在调用一个异步函数并且循环不会等到函数运行并取回结果并放入值。

最佳答案

在您的情况下,如果您想按顺序执行异步操作,则不能使用 forEach 循环。相反,您应该使用 for ... of 这将允许您正确使用 async/await:

exports.getAllProducts = async () => {
const query = 'some mysql query';

const products = await db.sequelize.query(query, {
type: sequelize.QueryTypes.SELECT
});
var result = new Array();

for (product of products) {
const isLiked = await helpers.isLiked(req.user.id, product.productId)
result.push({
'isLiked': isLiked,
productId: product.productId,
product_price: product.product_price,
product_name: product.product_name,
shop_name: product.shop_name,
shop_picture: product.shop_picture,
product_image: product.product_image,
num_comments: product.num_comments
});
}

return result;
};

关于javascript - 格式化响应对象 - Sequelize ORM。循环内的异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53363142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com