我在Node.js中构建了一个非常稳定的机器人应用程序,它基本上可以将请求连续发送到API。为了确保什么都不会出错,我会处理任何可能的错误,并且我已经设定了可能需要很长时间才能解决的承诺超时...
现在,我想通过删除我的安全网以及监视异步操作以查找任何类型的“异步泄漏”来改进应用程序,例如永久未决的承诺或任何我不知道的奇怪结果(这是重点我的问题)。
是否有任何工具可用于监控Node.js异步流?例如,在给定时间内获取流程中的待处理承诺总额?或者,如果任何承诺已超过一定时间,并且跟踪该承诺,则会收到警告?
如果这可以指导答案,这里是我使用的模块:
timepicker
很抱歉因为我无法准确地提出我的问题:我完全不了解我的期望/期望......
编辑:到目前为止,我的研究已经让我:由于我还在开发应用程序并且除了应用程序之外还有其他生活,我没有太多时间去研究它,但我肯定会在某个时候认真地解决这个问题!
答案 0 :(得分:1)
听起来你可能需要某种工作管理。
我最近一直在尝试kue来管理异步作业,这非常好。
它有一个用于启动和运行作业的API。每个工作都可以报告它的进度。它带有一个内置的作业仪表板,可以显示正在运行的作业及其进度。它有一系列广泛的事件,以便您可以监控每项工作的状态。
您需要安装Redis才能使用它,但这并不困难。
它不支持promises,但你可以在下面的代码示例中看到,很容易启动一个作业,然后将它包装在一个promise中,以便你可以等待完成作业:
const queue = kue.createQueue();
queue.process("my-job", 1, (job, done) => {
const result = ... some result ...
// Run your job here.
if (an error occurs) {
done(err); // Job failure.
return;
}
done(null, result); // Job success
});
function runMyJob () {
return new Promise((resolve, reject) => {
const job = queue.create("my-job").save();
job.on('complete', result => {
resolve(result); // Job has completed successfully, resolve the promise.
});
job.on("failed", err => {
reject(err); // Job has failed, reject the promise.
});
});
};
runMyJob()
.then(() => {
console.log("Job completed.")
})
.catch(err => {
console.error("Job failed.");
});
使用Node.js群集模块在多个CPU上并行工作相当容易。