angular – 在RxJs Observable中包装API函数
发布时间:2020-12-17 17:33:40 所属栏目:安全 来源:网络整理
导读:我是RxJs的新手,我有一个API用于地理编码,提供如下函数: simpleGeocode(options)* where options = { address: {addr: ... },success: Function,failure: Function}. The success function returns the geocoded LatLon object. 我在Angular应用程序中使用N
我是RxJs的新手,我有一个API用于地理编码,提供如下函数:
simpleGeocode(options) * where options = { address: {addr: ... },success: Function,failure: Function}. The success function returns the geocoded LatLon object. 我在Angular应用程序中使用NGRX Effects,所以我希望它能作为Observable使用,所以我可以使用标准的效果设置,如: @Effect() public calculateLocation: Observable<void> = this.actions .ofType(actions.CALCULATE_LOCATION) .switchMap((action) => { let location = action.payload; let options = { address: location.address }; // ... this.geocodeService.simpleGeocode(options) .map(latLon => new actions.CalculateLocationSuccessAction(latLon); .catch(error => new actions.CalculateLocationFailureAction(error); }, 但我完全不知道如何将该库调用包装成一个Observable.我已经从http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-bindCallback读过一些关于bindCallback()的信息,但我并不完全理解它.我确实理解它需要一个回调方法作为函数的最后一个参数,因此它看起来不适用于我的情况,因为成功和失败函数都作为对象的一部分传递给函数. 我如何从这个API方法中创建一个Observable,它将成功回调映射到Observable的下一个并且忽略Observable的错误? 解决方法
您可以使用Observable.create来包装具有回调接口的外部库.
这样的东西应该工作: Observable.create(observer => { geocoder.geocode({'address': address},function(results,status) { if (status === 'OK') { observer.next(results); observer.complete(); } else { observer.error(status); } }); }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |