Как поправить логику работы стримов?

Использую вот этот модуль для работы с RSS. Взял оттуда пример, всё работает. Но у меня событие 'readable' срабатывает много раз при отправке одного запроса на сайт. Как сделать так, чтобы запрос отсылался только один раз?
Пытался юзать stream.end(), но не вышло

const req = request('https://tjournal.ru/rss'),
      feedParser = new FeedParser();
req.on('response', function(res) {
  this.pipe(feedParser);
});

feedParser.on('readable', function() {
  var stream = this, item;
  if (item = stream.read()) {
    console.log(item.title, item.link);
  }
});
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 1
crazy_leo
@crazy_leo
Frontend Developer
Событие должно много раз срабатываться, так работают стримы.
Если вы хотите собрать все, а потом в конце сделать какое-то действие, то вот примерное решение:
var FeedParser = require('feedparser')
  , request = require('request');

var req = request('https://tjournal.ru/rss'),
      feedParser = new FeedParser();
req.on('response', function(res) {
  this.pipe(feedParser);
});

var titles = [], emitted = false

feedParser.on('readable', function() {
  var stream = this, item

  if (item = stream.read()) {
    titles.push(item.title)
  }

  !emitted && (emitted = true) && stream.on("end", function () {
    console.log(titles)
  })
})
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы