如何将变量引用传递给Observable订阅

时间:2016-04-01 20:24:08

标签: javascript scope angular rxjs

我正在尝试从Twitter获取推文,然后从这些推文中获取主题标签并从Flickr获取图像。

我希望推文和图片结合在一起。但是,请参阅最后的控制台日志。我希望第一个将输出当前的推文,第二个将输出为此推文检索的图像。

然而,会发生的事情是console.log(tweets[i])始终打印出列表中的最后一条推文,而console.log(results)打印当前结果(即打印每个flickr结果)。

顺便说一句,现在正在从json文件中检索推文和电影。

tweets$.subscribe((tweets) => {
            for (var i in tweets) {
                var hashtags = tweets[i].entities.hashtags;
                for (var j in hashtags) {
                    var flicks$ = this.flickrService.getImagesMock(hashtag[j]);
                    flicks$.subscribe((results) => {
                        console.log(tweets[i]);
                        console.log(results);
                    });
                }
            }
        });

所以我的问题是,如何让tweets[i]中的$flicks.subscribe引用创建订阅时使用的i

1 个答案:

答案 0 :(得分:1)

我想这是async js中范围的一个类似问题。

for (var i in tweets) {
    (function(index) {
        var hashtags = tweets[index].entities.hashtags;
        for (var j in hashtags) {
            var flicks$ = this.flickrService.getImagesMock(hashtag[j]);
            flicks$.subscribe((results) => {
                console.log(tweets[index]);
                console.log(results);
            });
        }        
    })(i);
}

基本上,在您的示例中,嵌套的subscribe在第一个循环已经完成后执行。