【问题标题】:Proper promises chaining in Sequelize querySequelize 查询中的正确承诺链接
【发布时间】:2018-12-30 02:36:47
【问题描述】:

我正在使用 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,
            });
        });
    });

它有效,但我认为它有点像回调地狱。

那么,有没有更好的方法来链接这个承诺?

此外,这种在关联模型中添加/更新行的方式会产生大量查询。有没有更好的方法来完成这项任务?

【问题讨论】:

    标签: javascript node.js express promise sequelize.js


    【解决方案1】:

    嗯,你实际上并没有链接承诺,而是嵌套它们。

    正确的链接如下所示:

    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

    【讨论】:

    • 谢谢!就是这样……:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多