[英]Proper promises chaining in Sequelize query
我正在使用node / Express,Sequelize和MySQL,并试图实现一些承诺。
我有Project
模型,并且具有hasMany
关系,我有ProjectImages
。 我正在添加/更新特定项目( chainedPromises
)的图像中的某些行,完成此任务后,我想返回此项目及其所有图像:
var chainedPromises = [];
// First resolve this group
data.ProjectImages.forEach((element) => {
chainedPromises.push(
models.ProjectImages.upsert(element, {
where: {
id: element.id,
},
})
);
});
Promise.all(chainedPromises)
.then((responses) => {
responses.map((response) => {
logJSON(response);
});
})
// Then look for the project and related models
.then(() => {
models.Projects.findById(req.params.id, {
include: [
{
model: models.ProjectImages,
},
],
})
// And return it
.then((result) => {
logJSON(result);
return res.send({
Project: result,
});
});
});
它有效,但我认为它有点像回调地狱。
那么,有没有更好的方法来实现这一承诺呢?
同样,在关联模型中添加/更新行的这种方式会产生大量查询。 有更好的方法来执行此任务吗?
好吧,您实际上并没有链接承诺,而是将其嵌套。
正确的链接如下所示:
Promise.all(chainedPromises)
.then((responses) => {
responses.map((response) => {
logJSON(response);
});
})
// Then look for the project and related models
.then(() => models.Projects.findById(req.params.id, {
include: [
{
model: models.ProjectImages,
},
],
}))
// And return it
.then((result) => {
logJSON(result);
return res.send({
Project: result,
});
});
您也可以选择查看async
/ await
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.