正确使用带有RXJS6和DWR的bindCallback

时间:2018-07-24 12:37:40

标签: typescript callback rxjs dwr

我目前正以以下方式(现已不推荐使用)bindCallback

const someMapping = (data) => { return { ... }};

public someCall(id) {
  // Foo.someFunction is function with callbacks
  return this.toObservable(Foo.someFunction, someMapping, id);
}

private toObservable(func, mappingFunction, ...args: any[]) {
  return bindCallback(func, mappingFunction)(...args);
} 

除了不推荐使用之外,还有另一个问题。如果我手动致电someFunction

var callFn = function(data) {...}
var warnFn = function(data) {...}
var errFn = function(data) {...}
Foo.someFunction(id, {callback: callFn, warningHandler: warnFn, errorHandler: errFn})

它将正确引发成功,警告和错误。我没有创建此DWR回调函数(有许多回调函数),并且无法更改它们。 Documentation的帮助不足。

我该如何修改它以处理所有三个(成功,警告,错误)回调并以可观察的形式返回?警告和错误都可能引发错误。

2 个答案:

答案 0 :(得分:1)

最好的选择是创建自己的可观察对象。

public someCall(id) {
  return new Observable(observer => {
                         Foo.someFunction(id,
                           {
                            callback: value => {
                                                 observer.next(value);
                                                 observer.complete();
                                               },
                            warningHandler: warn => observer.error(warn),
                            errorHandler: error => observer.error(error)
                          });

                        });

这类似于手动调用someFunction,但会发给流。

答案 1 :(得分:0)

摘自bindCallback文档

  

输入是带有某些参数的函数,最后一个参数   必须是完成后func调用的回调函数。

如果我正确理解您的代码

bindCallback(func, mappingFunction)

func实际上是Foo.someFunction

如果我查看Foo.someFunction的话,它不是以回调函数作为最后一个参数的函数,因为bindCallback要求它。

所以我想知道这段代码是否可行。