首页 > 解决方案 > 停止从请求库监听完成事件

问题描述

目前,我有以下nodejs代码

'use strict';
const request = require('request');
var stream;

function connect() {
    stream = request({
        url: 'https://cloud-sse.xxx.com/stable/stocksUS?token=YOUR_TOKEN&symbols=spy',
        headers: {
            'Content-Type': 'text/event-stream'
        }
    })
}

stream.on('complete', () => {
    console.log("Reconnecting");
    connect();
});

在某些时候,我想停止收听完成事件。

我可以知道,实现这一目标的正确方法是什么?

标签: javascriptnode.js

解决方案


您可以使用removeListener(),但必须避免使用匿名函数(请阅读此处)。

例子:

'use strict';
const request = require('request');
var stream;

function connectHandler()
{
    console.log("Reconnecting");

    stream = request({
        url: 'https://cloud-sse.xxx.com/stable/stocksUS?token=YOUR_TOKEN&symbols=spy',
        headers: {
            'Content-Type': 'text/event-stream'
        }
    });
}

stream.on('complete', connectHandler);

稍后您可以在要删除侦听器时执行此操作:

stream.removeListener('complete', connectHandler);

如果您不介意删除complete事件的所有侦听器,您可以随时执行

stream.removeAllListeners('complete');

推荐阅读