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

klo*_*way 5 javascript asynchronous node.js promise bluebird

我在 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');
Run Code Online (Sandbox Code Playgroud)

很抱歉无法准确地表达我的问题:我不知道我可以期待/希望什么......


编辑:到目前为止,我的研究使我:

  • Bluebird 的资源管理工具,但我想不出让它们有用的方法
  • 惊人的 npm监视器和附带的监视器仪表板,但由于某种原因,我还不能让它满足我的需要......

由于我仍在开发应用程序并且除了应用程序之外还有其他生活,因此我没有太多时间研究它,但我肯定会在某个时候认真地解决这个问题!

Ash*_*vis 0

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

我最近一直在尝试使用 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.");
    });
Run Code Online (Sandbox Code Playgroud)

使用 Node.js 集群模块可以很容易地在多个 CPU 上并行工作。

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