Rxjs,如何将回调方法链接到可观察?

Rxjs,如何将回调方法链接到可观察?,rxjs,Rxjs,我需要将回调方法链接到可观察链 private testMethod(): Rx.Observable<any> { const deferred = this.$q.defer(); let promise = deferred.promise; this.$window.fileChooser.open((results: any) => { deferred.resolve(results);

我需要将回调方法链接到可观察链

private testMethod(): Rx.Observable<any> {
        const deferred = this.$q.defer();
        let promise = deferred.promise;

        this.$window.fileChooser.open((results: any) => {
            deferred.resolve(results);
        }, (error: any) => {
            this.Logger.log(error);
        });

        return this.rx.Observable.fromPromise(promise)
            .map((contentURI: string) => {
                // need to link call-back method
                this.$window.FilePath.resolveNativePath(contentURI, (absolutePath: any) => {
                    // need to pass absolutePath to next map method
                    return absolutePath;
                });
            })
            .map((fileEntry: any) => {
                let results = [];
                results.push({
                    fileEntry,
                    mimeType: 'image/jpeg'
                });
                return results;
            })
            .catch(this.ExceptionService.observableCatcher('error'));
}
private testMethod():Rx.Observable

您可以使用创建回调的Observable:

从'rxjs/Observable'导入{Observable};
导入“rxjs/add/observable/bindCallback”;
...
.map((contentURI:string)=>{
const-bound=Observable.bindCallback((
路径:字符串,
回调:(结果:字符串)=>void
)=>this.$window.FilePath.resolveNativePath(路径,回调));
返回绑定(contentURI);
})
...
我使用了一个arrow函数,以便参数类型是显式的,并且在
this.$window.FilePath
上调用
ResolvePath

我没有使用
Function.prototype.bind
,因为它返回
any
,并且真正干扰了TypeScript对
bindCallback
函数类型的推断


上面的答案使用RxJS 5。但是,您添加到问题中的附加信息表明您正在使用版本4。在该版本中,函数名为。

非常感谢!我收到一个错误:\ this.rx.Observable.bindCallback不是函数。你有什么办法解决这个问题吗?你需要准确地解释什么是
this.rx.Observable
,因为这是引用RxJS
Observable
的一种不寻常的方式。如果在答案中使用导入,则
bindObservable
将添加到
Observable
原型中。我已更新了答案。答案使用RxJS版本5,但您似乎使用的是版本4。这个功能是很好的。