为了账号安全,请及时绑定邮箱和手机立即绑定

合并到 Observables / Singles 的方式有哪些?

合并到 Observables / Singles 的方式有哪些?

Helenr 2023-06-14 10:31:54
我有这段代码:public void testGetBlob() throws RequestException {    TestData.getNewApplication().flatMap(testApplication -> {        Client.initialize(testApplication.getAppId(), testApplication.getApiToken(), testApplication.getMasterKey());        assertNotNull(testApplication.getApiToken());        assertNotNull(testApplication.getAppId());        assertNotNull(testApplication.getMasterKey());        Entity entity = new Entity("Todo");        return entity.create();    }).flatMap(entity -> entity.setBlobProperty("text", "Hello world!".getBytes("UTF-8")))            .flatMap(isSuccess -> {                if(isSuccess) {                    // need to access `entity` at this point                    return Single.just(isSuccess);                } else {                    return Single.just(false);                }            }).subscribe(success -> {        Browser.getWindow().getConsole().log("Blob created");        finishTest();    }, error -> {        Browser.getWindow().getConsole().error(error.getMessage());        fail();    });    delayTestFinish(5000);}在上面的代码中,我需要做的是能够访问entity注释中的对象。如何做呢?
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

在一个运算符和另一个运算符之间,您只能发出一种对象类型。在您的情况下,您正在发出一个布尔值,但您还希望能够访问 Entity 对象。解决方案是将两个值(实体对象和布尔值)包装在一个类中并发出该类。


创建一个类来包装 Entity 的发射和 setBlobProperty 的结果。


    class Pair {

        private final Entity entity;

        private final boolean success;


        private Pair(Entity entity, boolean success) {

            this.entity = entity;

            this.success = success;

        }


        public Entity getEntity() {

            return entity;

        }


        public boolean isSuccess() {

            return success;

        }

    }

然后更改您的代码以发出该类:


public void testGetBlob() throws RequestException {

    TestData.getNewApplication().flatMap(testApplication -> {

// ...

        return entity.create();

    }).flatMap(entity -> 

        entity.setBlobProperty("text", "Hello world!".getBytes("UTF-8"))

            // 1. Flat map the setBlobProperty call and emit a Pair with the entity and result

            .flatMap(isSuccess -> Single.just(new Pair(entity, isSuccess)))

    )

            .flatMap(pair -> {

                if(pair.isSuccess()) {

                    // 2. entity is available here via pair.getEntity()

                    return Single.just(isSuccess);

                } else {

                    return Single.just(false);

                }

            }).subscribe(success -> {

// ...

    }

}

Ps:不要创建自己的 Pair 类,而是检查此线程中的选项之一。如果您使用的是 Kotlin,则有一个Pair类。



查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信