Javascript 监视Node.js环境中挂起的异步操作

Javascript 监视Node.js环境中挂起的异步操作,javascript,node.js,asynchronous,promise,bluebird,Javascript,Node.js,Asynchronous,Promise,Bluebird,我已经在Node.js中构建了一个非常稳定的机器人应用程序,它基本上可以连续地向API发送请求。为了确保不会出错,我会处理任何可能的错误,并且我已经为可能需要太长时间才能解决的承诺设定了超时时间 现在,我想通过移除我的安全网,监视异步操作来改进应用程序,以发现任何类型的“异步泄漏”,例如承诺永远挂起或任何我不知道的奇怪结果(这就是我问题的重点) 是否有任何工具用于监视Node.js异步流?例如,在给定的时间获取流程中待决承诺的总量?或者,如果任何承诺已被搁置超过给定时间,则会收到警告,并跟踪该承

我已经在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”,您将发现大量库。