繁体   English   中英

在Node.js承诺的环境中监视挂起的异步操作

[英]Monitoring pending async operations in Node.js promised environment

我在Node.js中构建了一个非常稳定的机器人应用程序,它基本上将请求连续发送到API。 为了确保什么都不会出错,我会处理任何可能的错误,并且我已经设定了可能需要很长时间才能解决的承诺超时...

现在,我想通过删除我的安全网并监视异步操作以找到任何类型的“异步泄漏”来改进应用程序,例如永久未决的承诺或任何我不知道的奇怪结果(这是我的问题的关键点) )。

是否有任何工具可用于监控Node.js异步流? 例如,在给定时间内获取流程中的待处理承诺总额? 或者,如果任何承诺已超过一定时间,并且跟踪该承诺,则会收到警告?

如果这可以指导答案,这里是我使用的模块:

 // 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的资源管理工具 ,但我无法找到使它们有用的方法
  • 令人惊叹的npm 显示器和附带的显示器 - 仪表板,但由于某种原因,我还不能让它满足我的需求......

由于我还在开发应用程序并且除了应用程序之外还有生命,我没有太多时间来研究它,但我肯定会在某些方面认真地解决这个问题!

听起来你可能需要某种工作管理。

我最近一直在尝试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上并行工作相当容易。

在kue网页上阅读更多内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM