每次我认为我理解了可观测物,但我不太理解可观测物。所以考虑一下我在Angular 4应用程序中使用的代码:
// this returns the url to our bitbucket server. the uriService returns
// an Observable<string>
return this.uriService.getBitBucketUrl(path)
// I expect exactly one result, no more, no less, otherwise exception
.single()
// somehow I still need a flatMap here, to supply the url value into the nested observable
.flatMap((url: string) => {
// we now have the bitbucket url, use it to get json from it.
return this.httpService.getJson(url)
// map the result and flatten it to an array
.flatMap((json: HttpResponse<any>): Array<any> => json.body.values)
// map each value into a more managed model
.map<any, BitbucketModel>((value: any) => {
// create and return BitBucketModel here based on json
})
});
我希望我对代码解释得足够好,所以它的本质是我不想在任何地方使用“订阅”。因为我使用异步管道,所以我希望可以一直观察到。但是,当我使用单(),然后我必须平面映射它,否则它给我一个错误,因为我不能返回可观察
如果我没有把我的问题说清楚,我很抱歉。我的场景是,我基本上需要一个配置设置,我的实际http请求基于该设置。所以我必须检索该设置,并根据该设置执行实际的http请求。
如果我理解正确的话,你是在问为什么platMap
。让我试着解释一下。
map
将输入同步转换为输出。所以它把每个项目转换成其他东西,用新项目替换旧项目。这个过程是同步的。
flatMap
也会替换,但会异步替换。
flatMap
获取一个项目,将其转换为可观测项目,并将新可观测蒸汽的输出置于原始项目的位置。
因此flatMap
可用于这两个实例(可能是更多的应用程序):
前任:
...'string1'... 'string2'... =>
...Output(Observable created from string1)...
...Output(Observable created from string2)...
在您的情况下:
输入:字符串(url)
输出:来自异步http调用的json。
所以,你必须使用flatMap
。它与单个代码无关
在您的示例中:
.flatMap((json: HttpResponse<any>): Array<any> => json.body.values)
这是一个同步转换。您正在获取一个对象并同步返回另一个对象。因此,它不必是平面图。你可以说
.map((json: HttpResponse<any>): Array<any> => json.body.values)
事实上,您的代码应该给出一个错误,因为flatMap
期望Observable
作为返回类型,但您正在返回一个对象。
我有一个简单的api请求,它向一个对象返回一个可观察的对象,该对象中有一组项,每个项中都有一个链接。因此,我想在当前异步流中直接获取链接后面的数据,但我收到一个CORS错误,错误是: 这是否可能与我当前的函数?还是我误解了一些基本概念?
我需要将一个项目列表映射到可观察的项目中,然后使用另一个函数处理每个可观察的项目flatmap,以将某个REST API调用的结果持久化到数据库中。 API调用将正确返回所有项。但是,FlatMapiteTable不会将所有项目传递给最后一个flatMap。 这是代码。 我不想使用doOnEach或doOnNext,我的问题是关于FlatMapiteTable的行为。 知道为什么我不能到达最后一张
我对webflux比较陌生,我想找到解决方案,在有条件时避免嵌套flatMap: 如何防止这种分支条件平面映射混乱?我无法想象如果我在项目中有另一个实体。会有更多嵌套的平面地图?
我需要在Nativescript中从web服务获取所有警报。但是地图不起作用。我试过这个函数。在Angular 5中工作正常,但在Nativescript中显示此错误: [ts]类型“Observable”上不存在属性“map”。在这方面。映射((响应:响应)= 我导入这个:
我想创建一个可观察的,将按需发射项目,这意味着我想要一个单一的订阅可观察的,并通知可观察的,我需要基于我的请求的新项目。 这就是我使用Publishsubject所做的: } 下面是活动类中的用法: 所以基本上我订阅了Flowable对象,并将Bitmap对象传递给我的Subject类,通过Flowable继续并返回结果,这个解决方案是正确的还是会产生一些内存泄漏? 是否有更好的解决方案将对象发送
我是RxJava的新手,我知道flatmaps用于将发出的项映射到可观察项。我还知道,基于文档,发出的可观测数据都被合并(扁平化)为一个单一的可观测数据流。 我在想,如果这些内在的可观察到的东西都完成了,会发生什么? 例如:我有一个可观察的,它发出一个项数据键。我必须进行另一个异步http调用才能从服务器获取项数据,所以我使用另一个Observable调用它。我使用一个平面地图来连接这两个,并创建