2017-08-31 3 views
3

をAPI関数をラップ:私はRxJsに初心者ですし、私は次のような機能を提供してジオコーディングのために使用していますAPIを持ってRxJs観察可能

simpleGeocode(options) 
* where options = { address: {addr: ... }, success: Function, failure: Function}. The success function returns the geocoded LatLon object. 

私は角度のアプリでこれを使用していますNGRX効果を持つので、私はので、私は次のように標準エフェクトの設定を使用することができ、それが観測としてそれを持ってしたいと思います:

@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()に関するいくつかの情報を読みましたが、私は完全に理解していません。関数の最後のパラメータにコールバックメソッドを必要とすることを理解しました。成功と失敗の両方の関数がオブジェクトの一部として関数に渡されるため、自分の状況で動作しないように見えません。

Observableの次への成功コールバックとObservableのエラーへの失敗をマッピングするこのAPIメソッドからObservableを作成するにはどうすればよいですか?

答えて

3

Observable.createを使用すると、コールバックインターフェイスを使用して外部ライブラリをラップすることができます。

そのような何か作業をする必要があります:

Observable.create(observer => { 
    geocoder.geocode({'address': address}, function(results, status) { 
    if (status === 'OK') { 
    observer.next(results); 
    observer.complete(); 
    } 
    else { 
    observer.error(status); 
    } 
    }); 
}); 
関連する問題