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
});
我有一个允许用户输入用户名的编辑文本,一旦输入用户名,该值就会发送到数据库以检查用户名是否已经存在,如果不存在则允许进一步操作,否则会出现错误显示。
到目前为止,这是我当前的代码。
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
});