Это происходит потому, что scheduleJob
является асинхронной функцией, и ваш resolve
вызов происходит вне вашего обратного вызова, прежде чем задание будет завершено.
Вы можете использовать значение fireDate
, которое передается обратному вызову от scheduleJob
, чтобы проверить, является ли текущее выполнение последним. Если это так, только тогда вы звоните resolve
с окончательными данными из обратного вызова:
async function dataRetrieval(start, end, rule){
let array = [];
return new Promise(function (resolve) {
schedule.scheduleJob({start: start, end: end, rule: rule}, async function (fireDate) {
let data = await service.getData();
array.push(data);
if (fireDate >= end) {
resolve(array);
}
});
});
}