总的来说,我对 RX 很陌生,尤其是 rxjava,请原谅我的错误。
此操作依赖于两个异步操作。
第一个使用过滤器函数尝试从异步 Observable 返回的列表中获取单个实体。
第二个是与设备通信并生成状态更新的 Observable 的异步操作。
我想获取从过滤器函数创建的 Single,将其应用于pairReader(...),并订阅其 Observable 以获取更新。我可以让它如图所示工作,但前提是我包含注释take(1),否则我会得到一个异常,因为链试图从 Single 中提取另一个值。
Observable<DeviceCredential> getCredentials() {
return deviceCredentialService()
.getCredentials()
.flatMapIterable(event -> event.getData());
}
Single<Organization> getOrgFromCreds(String orgid) {
return getCredentials()
// A device is logically constrained to only have a single cred per org
.map(DeviceCredential::getOrganization)
.filter(org -> org.getId().equals(orgid))
.take(1) // Without this I get an exception
.singleOrError();
}
Function<Organization, Observable<Reader.EnrollmentState>> pairReader(String name) {
return org -> readerService().pair(name, org);
}
getOrgFromCreds(orgid)
.flatMapObservable(pairReader(readerid))
.subscribe(state -> {
switch(state) {
case BEGUN:
LOG.d(TAG, "Pairing begun");
break;
case PAIRED:
LOG.d(TAG, "Pairing success");
callback.success();
break;
case NOTIFIED_SERVER:
LOG.d(TAG, "Pairing server notified");
break;
}},
error -> {
Crashlytics.logException(error);
callback.error(error.getLocalizedMessage());
});
噜噜哒
SMILET
回首忆惘然
相关分类