javascript - 在 Node.js promise 的环境中监视挂起的异步操作

标签 javascript node.js asynchronous promise bluebird

我在 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');

很抱歉无法准确地提出我的问题:我不知道我能期待/希望什么......


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

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

最佳答案

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

我最近一直在尝试使用 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 上并行执行此操作。

Read more on the kue web page.

关于javascript - 在 Node.js promise 的环境中监视挂起的异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38781512/

相关文章:

javascript - 使用 jquery 使动画异步/同步的干净方法

c# - 异步,在 visual studio 2010 中等待

javascript - JS new Image() 没有得到 css 类

javascript - 按键 [tab、shift、上/下/左/右箭头] 和 firefox

node.js - 避免对 busyboy 文件上传大小限制进行进一步处理

node.js - 如何使用 Amazon Elastic Beanstalk 在端口 80 上安全地运行 Node.js 服务器?

java - Spring Boot ASync + AutoWired Executor 与手动 Executor + Future/Callable?

javascript - 动态切片小数点数字

javascript - 如何确保我的 div 中的最后一个标记始终是 <br/>? IE11 中的插入符号问题(错误?)

javascript - mocha 的 puppeteer 中是否有类似于 TestNG 中的 dataProvider 的功能?