我在这里的问题可能听起来很少重复。但是我在stackoverflow上没有找到任何可以解决我的问题的答案。
我正在从我的一个功能中返回一个承诺。从数据库中获取一些数据后,承诺将得到解决。如果 db 表中没有数据,将被拒绝。此外,在解决承诺之前,我必须对获取的数据进行一些处理,这就是我使用回调的原因。
我的代码片段
return new Promise((resolve, reject) => {
ResourceModel.getById(resource_ID).then((data) => {
if (data.length > 0) {
console.log(data);
resolve(data);
console.log("Resolve Function Called");
} else {
console.log("No data available");
reject(new Error("No data available"));
}
});
});
ResourceModel.getById()
static getById(id) {
const _transaction = cds.transaction();
return _transaction.run(SELECT.from(Resource).where({ ID: id }));
}
cds.transaction()
是 SAP 提供的 cds 框架方法之一。
我期望它做的是在成功获取所有记录后,它应该调用提供的回调,我在其中编写了处理逻辑并resolve()
在处理完成后调用。
我在回调中接收数据,能够打印Data available
并且接收到的数据对象甚至Promise Resolved
在控制台上结束。但令人惊讶的是,承诺没有得到解决
我可以说“承诺没有得到解决”,因为这个返回的承诺将由Promise.all()
框架收集(如官方文档中所述 - https://cap.cloud.sap/docs/node.js/api#service -before ) 并在解决后返回响应。但我没有得到任何回应(既没有成功也没有失败)。邮递员永远处于加载状态。
上面的例子与setTimeout()
例子一起工作得很好。
我哪里错了?