gpt4 book ai didi

node.js - 使用 Sequilize 和 async/await 按正确顺序在 Node.js 中查找/创建记录

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

我正在努力在 Node.js 中正确使用 Sequilize。我正在阅读大量订单,从中创建独特的客户,或更新具有多个订单的客户。因此,对于每个订单,我首先查找客户是否存在,如果不存在则创建客户,如果存在则更新客户。但是 FindOne 在创建新客户后无法立即找到,因此代码最终会尝试创建重复的客户(由于 customerId 必须是唯一的,因此失败)。

我已经验证数据库中正在创建新客户,只是没有及时返回 FindOne() 查询。在执行另一个 FindOne 查询之前,我应该做些什么来确保新客户已完成写入数据库?

Node 似乎同时堆积了数十个异步 FindOne() 查询,并且只有在 FindOne 查询对所有这些查询都完成后才为这些订单执行 Create()。

     let customer =  await CustomerModel.findOne({
where: { customerId: order.customerId }
})
if (customer == null) {
await CustomerModel.create({
customerId: order.customerId,
reorders: 0
});
} else {
customer.reorders += 1;
await customer.save()
}
} catch (error) {
console.log(
"Customer could not be created for id: " + order.customerId + " :" + JSON.stringify(error)
);
}```

最佳答案

好的,我在这里找到了解决方案。我使用 findOrCreate() 从单独的异步操作切换到单个原子操作,例如:

const [customer, created] = await CustomerModel.findOrCreate({
where: { customerId: order.customerId },
defaults: {
customerId: order.customerId,
reorders: 0
}
});

如果我想执行多个异步操作,需要在 Node 中维护它们的顺序,这对我将来没有帮助,如果其他人有任何建议,请加入。

关于node.js - 使用 Sequilize 和 async/await 按正确顺序在 Node.js 中查找/创建记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60959858/

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