RxJs - 将 Flickr 请求转换为照片流

RxJs - Convert Flickr request to stream of photos

本文关键字:照片 转换 请求 Flickr RxJs      更新时间:2023-09-26

我是RXJS新手。试图找出为什么这段代码不起作用。

var $sources = $('#clickme');
var flickrApi = "https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=af11a8fa73ca2894e2f7c46ecd7a5a87&text=puppies&per_page=5&format=json&nojsoncallback=1";
Rx.Observable.fromEvent($sources, 'click')
.flatMap(click => Rx.Observable.fromPromise($.getJSON(flickrApi)))
.flatMap(response => Rx.Observable.fromArray(response.photos))
.subscribe(photo => console.log("The photo Object", photo));

目标是运行这个flickr api,接收照片并创建单个照片事件流。出于某种原因,subscribe不会发生。

现场(非工作)演示在这里:http://jsbin.com/pesiqo/2/edit

谢谢!

你的代码不是有效的JavaScript(JavaScript没有lambdas)。

还应向subscribe调用提供错误处理程序,以捕获发生的任何运行时错误。 你应该检查Flickr的响应,看看请求是否成功。

只需将您的代码更改为有效的JavaScript,它就可以运行,尽管由于无效的flickr API密钥而失败。

var $sources = $('#clickme');
var flickrApi = "https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=af11a8fa73ca2894e2f7c46ecd7a5a87&text=puppies&per_page=5&format=json&nojsoncallback=1";
Rx.Observable.fromEvent($sources, 'click')
.flatMap(function (click) {
  return Rx.Observable.fromPromise($.getJSON(flickrApi));
})
.flatMap(function (response) {
  if (response.stat === "fail") {
    return Rx.Observable.throw(new Error(response.message));
  }
  return Rx.Observable.fromArray(response.photos);
})
.subscribe(function (photo) {
  console.log("The photo Object", photo);
}, function (error) {
  console.log("an error occurred", error, error.message, error.stack);
});

JSBIN: http://jsbin.com/tupowacila/3/edit