在 sequelize db 操作后返回蓝鸟承诺

Returning a bluebird promise after sequilize db operation

我得到了一个应该删除数据库行的函数。该函数获取应删除的行的 ID。该函数还应该 return 删除的行来执行一些文本输出。

    deleteProcess(processToDeleteId: any): Promise<ProcessInstance> {
    let deletedProcess;
    let value;

    for (let key in processToDeleteId) {
        if (processToDeleteId.hasOwnProperty(key)) {
            value = processToDeleteId[key];
        }
    }

    this.sequelize.query("select * from Processes where processId = ?",
        { replacements: [value], type: this.sequelize.QueryTypes.SELECT })
        .then(function (processes) {
            for (let item in processes) {
                if (processes.hasOwnProperty(item)) {
                    deletedProcess = processes[item];
                    console.log(deletedProcess);
                }
            }

        })
        .delay(20);

    let that = this;
    return new Promise<ProcessInstance>(
        (function (resolve, reject) {
            that.sequelize.query("delete from Processes where processId = ?",
                { replacements: [value], type: that.sequelize.QueryTypes.DELETE })
                .then(function () {
                    console.log('Deleted successfully');
                    return deletedProcess;
                })
            reject(function (err) {
                console.log(err);
            })
        })
    )
};

问题是该函数在删除项目时运行良好,它还会加载已删除的行,但 return 不会加载该行

您永远不会调用 resolve,如果您想填充通过 promise 构造函数创建的 promise,则需要调用它。也就是说,我认为您在这里不需要 promise 构造函数。

这样做有用吗?

    return that.sequelize.query("delete from Processes where processId = ?",
        { replacements: [value], type: that.sequelize.QueryTypes.DELETE })
        .then(function () {
            console.log('Deleted successfully');
            return deletedProcess;
        })
        .catch(console.log)

顺便说一句,如果您使用 arrow function

,则无需执行 let that = this;