我試圖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映射到這種類型的流。我會嘗試創建一個例子,你將如何解決這個問題。 –