2016-04-01 22 views
0

我试图从Twitter获取推文,然后从这些推文获取标签并从Flickr获取图像。如何将变量引用传递给Observable订阅

我希望推文和图像能够结合在一起。但是,请查看最后的控制台日志。我期望第一个会输出当前的推文,第二个会输出为这个推文检索到的图像。

然而,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); 
        }); 
       } 
      } 
     }); 

所以我的问题是,我如何才能在$flicks.subscribetweets[i]来指代i那是在使用创建订阅时?

回答

1

我想这是一个在异步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); 
} 

基本上,在你的例子中嵌套的订阅是在第一个循环完成后执行的。