我正在创建一个小型 Node.js 应用程序来进行一些监控。必须使用此应用程序进行以下操作:
作业调度程序(使用node-schedule模块)在一段时间内从Web服务检索数据并将内容插入到数组中(用于进一步处理)。 完成工作后, promise 应该解析完整的数组,以便在我的主程序中使用它。
这是到目前为止我的编码。通过此编码, promise 在完成工作之前得到解决,并且数组为空。你能给我一些如何解决这个问题的提示吗?
async function dataRetrieval(start, end, rule){
let array = [];
return new Promise(function (resolve) {
schedule.scheduleJob({start: start, end: end, rule: rule}, async function (){
let data = await service.getData();
array.push(data);
});
resolve(array);
});
}
最佳答案
发生这种情况是因为 scheduleJob
是一个异步函数,并且您的 resolve
调用是在作业完成之前在回调之外进行的。
您可以使用从 scheduleJob
传递给回调的 fireDate
值来检查当前执行是否是最后一次。如果是这样,只有这样,您才能使用回调中的最终数据调用 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);
}
});
});
}
关于node.js - Node.js 中作业执行后返回 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60307587/