gpt4 book ai didi

java - RxJava : How to run two sequential calls : second depends on first

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:04:49 25 4
gpt4 key购买 nike

我需要创建一个可观察对象,其中按顺序运行 2 个基于改造的调用 block 。我知道我可以在一个 Observer 调用中运行第二个改造调用,但这会非常困惑。我的 Observable 代码位于与调用者不同的类中,它返回一个 Observable。我想将第一次调用的结果传递给第二次调用,然后在第二次调用完成后将 Observable 返回给调用类。 (我使用的是 Java 7 而不是 8)

public class GetFollowing {

public Observable< ArrayList<Media> > init() {
return Observable.create(
new Observable.OnSubscribe< ArrayList<Media> >() {
@Override
public void call(Subscriber<? super ArrayList<Media> > subscriber) {

...

我还需要向调用类传回一个与我传给第二个改造调用的类型不同的类型。我一直在阅读有关 map flatMap 和 concat 的信息,但我似乎无法弄清楚如何构造它们以供我在这里使用。

更新

我想到了这个,不确定它是否是最优雅的,或者它是否会起作用……但如果它起作用,是否有任何方法可以将第一个 observable 的结果传递给第二个?另外,如果第一个 observable 失败,我将如何处理问题?

Observable< ArrayList<Media> > test;

Observable.concat(

Observable.create(
new Observable.OnSubscribe< ArrayList<User> >() {
@Override
public void call(Subscriber<? super ArrayList<User> > subscriber) {

}
}
),
test = Observable.create(
new Observable.OnSubscribe< ArrayList<Media> >() {
@Override
public void call(Subscriber<? super ArrayList<Media> > subscriber) {

}
}
)

);

return test;

最佳答案

如果需求可以改写如下:

  1. 你有两个方法要执行,都返回Observable s.
  2. 第一个方法的 Observable 发出的项目需要在它们发生时输入到第二种方法中。
  3. 第二种方法的输出是 Observable这是基于对第一个项目的一些计算 Observable .

现成的flatMap RxJava 中的功能是适合您的解决方案。下面是一个可以帮助您的简单实现。

public static void main(String[] args) {
Observable<Integer> o1 = Observable.just(1, 2);
Observable<String> result = o1.flatMap(result1 -> Observable.just("Value is: "+result1));
result.subscribe(finalResult -> System.out.println("Final result: "+finalResult));
}

输出:

Final result: Value is: 1
Final result: Value is: 2

另一方面,如果第二种方法没有返回 Observable , 但对发出的项目执行一些操作,您可以使用 map 实现相同的操作.

关于java - RxJava : How to run two sequential calls : second depends on first,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42016585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com