javascript – 使用Bluebird.js和Twitter流的Promises和流

我是Promises和Node的新手,对使用流的Promises感到好奇.我可以宣传一个流吗?
使用Bluebirdjs和Twit模块我有以下内容
var Twit = require('twit')
var Promise = require("bluebird");

var T = new Twit({
 consumer_key:         process.env.CONSUMER_KEY,consumer_secret:      process.env.CONSUMER_SECRET,access_token:         process.env.ACCESS_TOKEN,access_token_secret:  process.env.ACCESS_TOKEN_SECRET
})

Promise.promisifyAll(Twit);
Promise.promisifyAll(T);

var sanFrancisco = [ '-122.75','36.8','-121.75','37.8' ]

T.streamAsync('statuses/filter',{ locations: sanFrancisco })
.then(function(connection){
 connection.onAsync('tweet')
  .then(function (tweet) {
   console.log(tweet)
  })
});

运行此代码不会记录推文,也不会抛出任何错误.似乎没有任何事情发生连接,但是没有一个.then承诺起作用.

在尝试实现twit docs中发现的承诺之前,原始代码

var sanFrancisco = [ '-122.75','37.8' ]

var stream = T.stream('statuses/filter',{ locations: sanFrancisco })

stream.on('tweet',function (tweet) {
 console.log(tweet)
})

解决方法

我很遗憾地说,由于承诺和流之间的根本区别,这将无效.你说你们两个都是新人,所以让我简单介绍两者.

承诺可以被视为可能尚未到达的某些单一价值的占位符.例如,一些假设函数getTweet()可以像这样工作:

getTweet()
    .then(function (tweet) {
        //Do something with your tweet!
        console.log(tweet);
    });

但这只会让你发一条推文!要获得另一个,你必须再次调用getTweet(),然后使用新的.then().实际上,在使用promises时,你可以保证.then()只调用一次包含函数

流是连续的数据流.您不必手动询问推文,然后是另一个推文,然后是另一个推文.你打开水龙头,然后它就会一直持续到它完成或你告诉它停止.

因此,总而言之,您无法宣传流,因为承诺是针对连续数据流的单个值和流.

我假设您问了这个问题,因为您喜欢promise接口,并且想要使用类似于流的东西?根据您要实现的目标,有不同的库可以更好地处理流. EventStream就是一个例子.让我知道你的计划,我可以给你一个例子.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...