gpt4 book ai didi

javascript - 对于在 Sequelize 中链接在交易中的 promise 内部循环

转载 作者:行者123 更新时间:2023-11-29 23:24:04 29 4
gpt4 key购买 nike

我正在构建一个 nodeJS、hapiJS 和 Sequelize(使用 PostgreSQL)应用程序,当我在使用 Sequelize 的事务中链接的 promise 中使用 for 循环时遇到一些问题。

我想用内容列表中的不同内容查询我的数据库。

我已经使用 Promises.all() 或 Promise.map() 找到了一些解决方案,但我无法将其应用于我的问题。

谁能给我解释一下正确的方向?

db.User.sequelize.transaction(function(t){
return db.User.findOrCreate({
where: {
name: request.payload.user.id
},
transaction: t
})
.then( userResult => {
return db.Order.findOrCreate({
where: {
userId : userResult[0].dataValues.userId,
code : request.payload.order.code,
brand : request.payload.order.brand,
date : request.payload.date
},
transaction: t
})
})
// ############## HERE ##################
.then( orderResult => {
console.log("I WILL BE PRINTED")
for (var i = 0; i < request.payload.content; i++){
console.log("I WILL NOT BE PRINTED")
db.Product.findOrCreate({
where :{ean : request.payload.content[i].product.ean},
transaction: t // FAIRE BOUCLE CONTENT
})
.then( productResult => {
return db.Info.findOrCreate({
where: {
//TODO : prefix et password
productId: productResult[0].dataValues.productId,
orderId: orderResult[0].dataValues.orderId
}
}).then( infoResult => {
console.log(productResult)
return db.Range.create({
infoId : infoResult[0].dataValues.infoId,
low : productResult[0].dataValues.offset,
high : request.payload.content[i].quantity
})
})
})
}
})
.then(res => { return console.log("ok")})
})

最佳答案

这里的事情是你永远不会首先创建一个 promise 。您的循环根本不返回 promise ,Promise.all 仅在所有 promise 都已解决时才会触发。

由于您使用的是 es6 语法,因此您最好使用 map 方法而不是 for 循环。这是一种更实用的方法。

结果会是这样的:

Promise.all(request.payload.content.map(content => {
db.Product.findOrCreate({
where :{ean : content.product.ean},
transaction: t
})
})

如果您更喜欢使用 for 循环,策略是相同的。将您的循环包装在 promise.all 中,它将通过您的查询将所有返回的 promise 存储在一个数组中。当循环结束并且所有 promise 都已解决时,将触发 promise.all 。请注意,如果单个 promise 被拒绝,promise.all 将被拒绝

关于javascript - 对于在 Sequelize 中链接在交易中的 promise 内部循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49778826/

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