Мой вопрос здесь может показаться немного повторяющимся. Но я не нашел ответа на stackoverflow, который может решить мою проблему.
Я возвращаю обещание от одной из моих функций. Обещание будет выполнено после получения некоторых данных из базы данных. И будет отклонен, если в таблице БД нет данных. Также я должен выполнить некоторую обработку извлеченных данных перед разрешением обещания, поэтому я использую обратные вызовы.
Мой фрагмент кода
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.
Я ожидаю, что после успешного извлечения всех записей он должен вызвать предоставленный обратный вызов, где у меня есть логи обработки c записано и после обработки * вызывается resolve()
.
Я получаю данные в обратном вызове, могу распечатать Data available
, и полученный объект данных завершается даже Promise Resolved
на консоли. Но удивительно, что обещание не разрешается
Я могу сказать, что "обещание не выполняется", потому что это возвращенное обещание будет собрано в Promise.all()
платформой (как указано в официальных документах - * 1022). *https://cap.cloud.sap/docs/node.js/api#service -перед ) и вернуть ответ после разрешения. Но я не получаю никакого ответа (ни успеха, ни неудачи). Почтальон остается в состоянии загрузка ... состояние навсегда.
Приведенный выше пример отлично работает с примером setTimeout()
.
где я ошибаюсь?