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

How to pass variable reference to Observable subscription

本文关键字:Observable 订阅 引用 变量      更新时间:2023-11-15

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

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

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

顺便说一句,目前正在从json文件中检索tweet和flick。

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.subscribe中的tweets[i]引用创建订阅时正在使用的i

我想这是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);
}

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