2016-04-01 6 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

Я предполагаю, что это сложная проблема с областью действия 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); 
} 

В принципе, в вашем примере вложенная подписка выполняется после того, как первый цикл уже завершен.

Смежные вопросы