在 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;
我得到了一个应该删除数据库行的函数。该函数获取应删除的行的 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;