gpt4 book ai didi

node.js - Nest.JS 中的 Sequelize 查询在返回前未解析

转载 作者:行者123 更新时间:2023-12-03 22:26:55 26 4
gpt4 key购买 nike

我有一个函数可以从数据库中获取订单,从响应中创建一个对象,从数据库中获取所有行项目的响应,并遍历这些项目以获取详细记录。我遇到的问题是,即使我试图等待来自子查询的响应,整个函数仍在返回。

代码如下:

public async getOrderById(orderId:string) {
const order: [any] = await this.dbInstance.query('exec getOrder :orderID' {replacements: {orderID: orderId}, type: sequelize.QueryTypes.SELECT});
const orderLines: [any] = await this.dbInstance.query('exec getOrderLines :orderID' {replacements: {orderID: orderId}, type: sequelize.QueryTypes.SELECT});

const orderArray: any = order.map((o) => {
return {
orderId,
customerId: o.CustomerID
total: o.total,
lines: []
};
});

const orderResponse: Order = orderArray[0];

orderLines.forEach(async (orderLine) => {
let addItem: any;
addItem = {
itemNumber: orderLine.itemNumber,
quantity: orderLine.quantity,
unitPrice: orderLine.unitPrice,
orderLineDetails: []
};

await this.dbInstance.query('exec getLineDetails :orderLineId{replacements: {orderLineId: orderLine.orderLineId}, type: sequelize.QueryTypes.SELECT})
.then( (details) => {
details.forEach((detail) => {
addItem.orderLineDetails.push({
name: detail.name,
value: detail.val
});
});
});

orderResponse.orderLines.push(addItem);
});

return orderResponse;

}

因此,代码将进入订单行上的 forEach,创建 add Item,但随后它会在等待 orderLineDetails 的结果创建并添加到 orderLineDetails 数组之前推送 addItem。如果我让整个事情运行,那么在响应已经返回后,带有推送 orderLineDetails 的断点将运行一秒钟。

我错过了什么?

最佳答案

所以问题是我用来执行非异步映射(forEach)的方法,以及修改循环中的底层集合。

我最终做出了这个改变:

const orderLinePromises = orderLines.map(async (orderLine) => { 
let addItem : any;

addItem = {
itemNumber: orderLine.itemNumber,
quantity: orderLine.quantity,
unitPrice: orderLine.unitPrice,
orderLineDetails: []
};

const details = await this.dbInstance.query('exec getLineDetails :orderLineId{replacements: {orderLineId: orderLine.orderLineId}, type: sequelize.QueryTypes.SELECT});
addItem.orderLineDetails = details.map((detail) => {
return {
name: detail.name,
value: detail.val,
};
);

return addItem;

});

orderResponse.orderLines = await Promise.all(orderLinePromises);

return orderResponse;

关于node.js - Nest.JS 中的 Sequelize 查询在返回前未解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736999/

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