RxJS + Node.js Http 请求

RxJS + Node.js Http Request

Nodejs 服务器端实现:如何使用https://www.npmjs.com/package/request with https://www.npmjs.com/package/rx to make GET request to https://www.reddit.com/r/javascript.json?

目标:每当我使用的任何站点发生数据更改时,我都会尝试实现持续流式传输api url。

你想创建一个观察者从回调通知的观察者。尝试类似的东西:

rx.Observable.create(function (observer) {
  request('https://www.reddit.com/r/javascript.json', function (error, response, body) {
    if (error) { observer.onError(); }
    else { observer.onNext({response: response, body: body }); }
    observer.onCompleted();
  })
})
.map(/* do something */)
.subscribe();

很遗憾,当 https://www.reddit.com/r/javascript.json 更新时,您将无法收到更新,因为他们无法将此信息推送给客户端。

Github 等服务可让您注册一个 webhook,这将使他们能够将数据推送到您服务器上的端点。我不确定 Reddit 是否支持这个。

作为替代解决方案,并基于 AkkarinZA 在他的回答中所说的内容,您可以使用类似于以下内容的方式轮询 json 文档:

var fetchContent = function(url) {
    return rx.Observable.create(function (observer) {
        request(url, function (error, response, body) {
            if (error) { observer.onError(); }
            else { observer.onNext({response: response, body: body }); }
            observer.onCompleted();
        })
    });
};

rx.Observable.interval(1000)
    .map(function() { return 'https://www.reddit.com/r/javascript.json' })
    .flatMap(fetchContent)
    .map(/* do something */)
    .subscribe();

这样的轮询不是一个好方法。