繁体   English   中英

Sequelize查询中正确的Promise链接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM