Stream 中的改造调用

Retrofit call within Stream

我有一个允许用户输入用户名的编辑文本,一旦输入用户名,该值就会发送到数据库以检查用户名是否已经存在,如果不存在则允许进一步操作,否则会出现错误显示。

到目前为止,这是我当前的代码。

usernameObservable
            .skip(2)
            .debounce(800, TimeUnit.MILLISECONDS)
            .subscribe(username -> {
                Observable<Boolean> observable = apiService.isAvailable(username);
                observable.observeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(aBoolean -> {

                        }, throwable -> {

                        });
            });

现在网络请求是在最后发出的,但是是否可以在我收到数据之前发出请求,一旦我收到数据,我就会在流上执行一些其他操作。

您正在寻找 flatMap 操作员。它允许您将一个事件转换为另一个可观察到的事件,这会将发射转发到原始流。您的错误通知也将被转发。

usernameObservable
        .skip(2)
        .debounce(800, TimeUnit.MILLISECONDS)
        .flatMap(username -> apiService.isAvailable(username))
        .subscribe(isAvailableResult -> {
            // react here
        }, throwable -> {
            // show an error here
        });