我试图promisify流,但它似乎比我预期的更难。这里是我的尝试:Promisify streams
'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))
})
}
我不知道TwitterStream api。这个流是无限期打开的,只要有新数据(tweets)可用,就会发出'data'事件。而'end'只在连接中断时才被调用? –
@ t.niese完全是 – Mazzy
您无法直接将Promises映射到这种类型的流。我会尝试创建一个例子,你将如何解决这个问题。 –