我在 Node.js 中构建了一个非常稳定的机器人应用程序,它基本上可以持续向 API 发送请求。为确保万无一失,我会处理任何可能的错误,并为可能需要很长时间才能解决的 promise 设置超时...
现在,我想通过删除我的安全网来改进应用程序,并监控异步操作以发现任何类型的“异步泄漏”,例如永远挂起的 promise 或我不知道的任何奇怪结果(这就是重点我的问题)。
是否有任何工具可以监控 Node.js 异步流程?例如,在给定时间获取流程中未决 promise 的总数?或者,如果任何 promise 的未决时间超过给定时间,则会收到警告并跟踪该 promise ?
如果这可以指导答案,这里是我使用的模块:
// Bluebird (promises)
var Promise = require("bluebird");
// Mongoose with promises
var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
// Rate limiter with promises
var Bottleneck = require("bottleneck");
// Promisified requests
var request = require('request-promise');
很抱歉无法准确地提出我的问题:我不知道我能期待/希望什么......
编辑:到目前为止,我的研究使我:
- Bluebird's resource management tools , 但我想不出让它们有用的方法
- 神奇的 npm monitor和内置的监控仪表板,但出于某种原因,我还不能让它满足我的需要……
由于我仍在开发应用程序并且在应用程序之外还有生活,所以我没有太多时间研究它,但我肯定会在某个时候认真解决这个问题!
最佳答案
听起来您可能需要某种工作管理。
我最近一直在尝试使用 kue 来管理异步作业,它非常好。
它有一个用于启动和运行作业的 API。每个作业都可以报告它的进度。它带有一个内置的作业仪表板,可以向您显示正在运行的作业及其进度。它具有广泛的事件集,因此您可以监控每个作业的状态。
您需要安装 Redis 才能使用它,但这并不难。
它不支持 promise ,但您可以在我下面的代码示例中看到,很容易开始一项工作,然后将其包装在 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 上并行执行此操作。
关于javascript - 在 Node.js promise 的环境中监视挂起的异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38781512/