在 RXJS6 和 DWR 中正确使用 bindCallback

Properly using bindCallback with RXJS6 and 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 callback function (there are many of them), and I can't change them. Documentation 帮助不够。

我如何修改它以处理所有三个(成功、警告、错误)回调和 return 作为可观察对象?警告和错误都可能引发错误。

来自 bindCallback 文档

The input is a function func with some parameters, the last parameter must be a callback function that func calls when it is done.

如果我理解正确你的代码

bindCallback(func, mappingFunction)

func 实际上是 Foo.someFunction.

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

所以我想知道这段代码是否有效。

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

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,但会发送到流。