Javascript 监视Node.js环境中挂起的异步操作
我已经在Node.js中构建了一个非常稳定的机器人应用程序,它基本上可以连续地向API发送请求。为了确保不会出错,我会处理任何可能的错误,并且我已经为可能需要太长时间才能解决的承诺设定了超时时间 现在,我想通过移除我的安全网,监视异步操作来改进应用程序,以发现任何类型的“异步泄漏”,例如承诺永远挂起或任何我不知道的奇怪结果(这就是我问题的重点) 是否有任何工具用于监视Node.js异步流?例如,在给定的时间获取流程中待决承诺的总量?或者,如果任何承诺已被搁置超过给定时间,则会收到警告,并跟踪该承诺 如果这可以指导答案,以下是我使用的模块:Javascript 监视Node.js环境中挂起的异步操作,javascript,node.js,asynchronous,promise,bluebird,Javascript,Node.js,Asynchronous,Promise,Bluebird,我已经在Node.js中构建了一个非常稳定的机器人应用程序,它基本上可以连续地向API发送请求。为了确保不会出错,我会处理任何可能的错误,并且我已经为可能需要太长时间才能解决的承诺设定了超时时间 现在,我想通过移除我的安全网,监视异步操作来改进应用程序,以发现任何类型的“异步泄漏”,例如承诺永远挂起或任何我不知道的奇怪结果(这就是我问题的重点) 是否有任何工具用于监视Node.js异步流?例如,在给定的时间获取流程中待决承诺的总量?或者,如果任何承诺已被搁置超过给定时间,则会收到警告,并跟踪该承
//蓝鸟(承诺)
var承诺=要求(“蓝鸟”);
//承诺的猫鼬
var mongoose=require('mongoose');
mongoose.Promise=require('bluebird');
//有承诺的利率限制器
var瓶颈=要求(“瓶颈”);
//承诺请求
var请求=要求(“请求-承诺”)代码>听起来您可能需要某种工作管理
我最近一直在尝试kue来管理异步作业,这非常好
它有一个用于启动和运行作业的API。每个作业都可以报告其进度。它附带一个内置的作业仪表板,显示正在运行的作业及其进度。它有一组广泛的事件,因此您可以监视每个作业的状态
您需要安装Redis才能使用它,但这并不困难
它不支持承诺,但您可以在下面的代码示例中看到,很容易开始一项工作,然后将其包装在承诺中,这样您就可以等待工作完成:
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上并行工作非常容易
如果您的每个异步操作都有一个超时,您能不能记录下哪些操作达到了超时,然后再查看这些操作?@jfriend00:我可以,但我想知道是否有为监控目的而设计的工具/插件/包/模块/方法,或者至少对监控有帮助。我希望对整个过程有一个全面的了解,而不是通过手术逐个检查每个异步路径……IIRC有一些专门的promise库支持这种工具。例如,我不知道它发生了什么。如果您在web上搜索“javascript promise monitor”,您将发现大量库。