Typescript 在RXJS6和DWR中正确使用bindCallback

Typescript 在RXJS6和DWR中正确使用bindCallback,typescript,callback,rxjs,dwr,Typescript,Callback,Rxjs,Dwr,我目前使用的bindCallback方法如下(现已弃用): 除此之外,我还有另一个问题。如果我手动调用someFunction: var callFn = function(data) {...} var warnFn = function(data) {...} var errFn = function(data) {...} Foo.someFunction(id, {callback: callFn, warningHandler: warnFn, errorHandler: errFn}

我目前使用的
bindCallback
方法如下(现已弃用):

除此之外,我还有另一个问题。如果我手动调用
someFunction

var callFn = function(data) {...}
var warnFn = function(data) {...}
var errFn = function(data) {...}
Foo.someFunction(id, {callback: callFn, warningHandler: warnFn, errorHandler: errFn})
它将正确地抛出成功、警告和错误。我没有创建这个回调函数(有很多回调函数),也无法更改它们。这还不够


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

来自
bindCallback
文档

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

如果我正确理解你的代码

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

当前代码可以工作,但仅用于成功回调。这也适用于
Foo.someFunction(id,function(data){…})bindCallback
工作的原因。
someFunction
的签名是什么?你的问题是什么?实际上是DWR函数
Foo.someFunction=函数(p0,p1,p2,48){…}其中p0-p2是参数,_48是回调函数,得到了大约150个这样的函数。这个回调可以以某种方式返回一个或三个回调,如上面的示例所示。我仍然不确定您想知道什么。您的问题不包含实际问题。如果现在更有意义,请添加一些信息
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)
                          });

                        });