当我打开缰绳时,上面写着:
subscribe is deprecated: Use an observer instead of an error callback
angular应用的代码:
this.userService.updateUser(data).pipe(
tap(() => {bla bla bla})
).subscribe(
this.handleUpdateResponse.bind(this),
this.handleError.bind(this)
);
我不知道该用什么,怎么用……
谢谢!
也许有趣的是,观察者对象也可以(仍然)包含complete()方法和其他附加属性。例子:
.subscribe({
complete: () => { ... }, // completeHandler
error: () => { ... }, // errorHandler
next: () => { ... }, // nextHandler
someOtherProperty: 42
});
这样可以更容易地省略某些方法。对于旧的签名,必须提供未定义的并坚持参数的顺序。现在,只提供下一个完整的处理程序就清楚多了。
使用RxJS的新方法非常简单:
以前的版本:
this.activatedRoute.queryParams.subscribe(queryParams => {
console.log("queryParams, queryParams)
}, error => {
})
新版本:
this.activatedRoute.queryParams.subscribe(
{
next: (queryParams) => {
console.log('queryParams', queryParams);
},
error: (err: any) => { },
complete: () => { }
}
);
如果你有一个对象类型为Observable<T> | Observable<T2> -而不是Observable<T|T2>,你就会得到这个错误。
例如:
const obs = (new Date().getTime() % 2 == 0) ? of(123) : of('ABC');
编译器不会将类型为Observable<number |的obs设为字符串>。
它可能会让你惊讶,下面会给你错误使用一个观察者而不是一个完整的回调和期望2-3个参数,但得到1。
obs.subscribe(value => {
});
这是因为它可以是两种不同类型中的一种,而编译器不够聪明,无法协调它们。
你需要改变你的代码返回Observable<number | string>而不是Observable<number> | Observable<string>。这其中的微妙之处取决于你在做什么。
也许有趣的是,观察者对象也可以(仍然)包含complete()方法和其他附加属性。例子:
.subscribe({
complete: () => { ... }, // completeHandler
error: () => { ... }, // errorHandler
next: () => { ... }, // nextHandler
someOtherProperty: 42
});
这样可以更容易地省略某些方法。对于旧的签名,必须提供未定义的并坚持参数的顺序。现在,只提供下一个完整的处理程序就清楚多了。