我目前正以以下方式(现已不推荐使用)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的帮助不足。
我该如何修改它以处理所有三个(成功,警告,错误)回调并以可观察的形式返回?警告和错误都可能引发错误。
答案 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
要求它。
所以我想知道这段代码是否可行。