javascript - Promise 流

标签 javascript node.js promise eventemitter

我正在尝试 promise 流,但它似乎比我预期的更难。这是我的尝试:

'use strict'

const Promise = require('bluebird')
const Twitter = require('twitter')

const TwitterStream = module.exports = function TwitterStream (config) {
  // init Twitter Streaming API for OAuth
  this.stream = new Twitter({
    consumer_key: config.get('/twitter/consumerKey'),
    consumer_secret: config.get('/twitter/consumerSecret'),
    access_token_key: config.get('/twitter/accessTokenKey'),
    access_token_secret: config.get('/twitter/accessTokenSecret')
  })
  .stream('statuses/filter', {
    track: config.get('/twitter/track')
  })
}

TwitterStream.prototype.receive = function () {
  return new Promise((resolve, reject) => {
    this.stream.on('data', resolve).on('error', reject)
  })
}

TwitterStream.prototype.destroy = function () {
  this.stream.destroy()
}

主要问题是当我创建对象时

const stream = new TwitterStream(config)

stream.receive().then((data) => console.log(data))

当我执行时,仅读取一个对象。没有其他数据被传输。

  TwitterStream.prototype.receive = function () {
     return new Promise((resolve, reject) => {
       this.stream
         .on('data', (data) => resolve(data)
         .on('error', (error) => reject(error))
       })
    }

最佳答案

通过使用 Rx 扩展,这非常简单:

TwitterStream.prototype.receive = function () {
    return Rx.Observable.create((observer) => {
        this.stream
            .on('data', (data) => observer.onNext(data))
            .on('error', (err) => observer.onError(err));
    });
}

然后

const stream = new TwitterStream(config)

stream.receive().subscribe((data) => console.log(data));

关于javascript - Promise 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41358692/

相关文章:

javascript - Node.js 正则表达式替换复杂 HTML 开放标记中的多个属性

scala - 阿卡 Actor : ask pattern vs Promise

javascript - 如何防止测试被汇总捆绑?

javascript - 使用javaScript访问父div中的元素?

javascript - Meteor js 光标 hasNext() 和 next()?

node.js - 如何使用 Mongoose 模式内部获取和设置函数

javascript - 使用 JavaScript 定位 float 元素(用于动画)

node.js - 使用 Cassandra 进行分页

Javascript Promise 和 Firebase

javascript - 调用具有单个 Promise 参数的 native 模块的 JS 语法是什么?