Angular Rxjs型可观测<;未知>;不可分配给可观察对象<;无效>;
我正在从5升级到RXJSV6,我还将我的typescript版本从2.9.2升级到3.7.4。在我的一个angularjs组件中,我调用了一个返回承诺的服务。为了便于使用,我使用from rxjs函数将其转换为组件中的可观察值。我的代码是这样的(名称从原来的更改)Angular Rxjs型可观测<;未知>;不可分配给可观察对象<;无效>;,angular,typescript,rxjs,Angular,Typescript,Rxjs,我正在从5升级到RXJSV6,我还将我的typescript版本从2.9.2升级到3.7.4。在我的一个angularjs组件中,我调用了一个返回承诺的服务。为了便于使用,我使用from rxjs函数将其转换为组件中的可观察值。我的代码是这样的(名称从原来的更改) saveObject(名称:字符串):可观察{ 归来( this.myService.saveMyObject(名称) .然后(()=>{ //在ui上显示保存成功 返回; }), ) .烟斗( catchError((错误)=>{
saveObject(名称:字符串):可观察{
归来(
this.myService.saveMyObject(名称)
.然后(()=>{
//在ui上显示保存成功
返回;
}),
)
.烟斗(
catchError((错误)=>{
//错误处理逻辑
返回();//此位是试图修复此问题
}),
);
}
我遇到的问题是,组件中的saveObject函数返回一个可观察的void,承诺最终解决为void,但当我尝试返回可观察的时,我得到一个错误,表示可观察的from<Promise<void>>(//promiseCode)
from(//promiseCode)
尝试returnof()
来完成可观察的,看看它是否有效
from(this.myService.saveMyObject(name))
.pipe(
mergeMap(()=>of()),
catchError((error) => {
// error handling logic
return of(); // this bit was an attempt to fix the problem
}),
);
这是因为操作符要求您返回一个可观察的。如文件所述,catchError()
你需要返回一个可观察的
:warning: Remember to return an observable from the catchError function!
saveObject(name: string): Observable<void> {
return from(
this.myService.saveMyObject(name)
.then(() => {
//Show Save success on ui
return;
}),
)
}
this.saveObject.subscribe((res) => {
// handle success
}, (error) => {
// handle errors, without the need to return an observable
});
如果您不想返回一个可观察对象,那么使用catchError操作符的另一种方法是在订阅该可观察对象时处理错误回调上的错误
:warning: Remember to return an observable from the catchError function!
saveObject(name: string): Observable<void> {
return from(
this.myService.saveMyObject(name)
.then(() => {
//Show Save success on ui
return;
}),
)
}
this.saveObject.subscribe((res) => {
// handle success
}, (error) => {
// handle errors, without the need to return an observable
});
saveObject(名称:字符串):可观察{
归来(
this.myService.saveMyObject(名称)
.然后(()=>{
//在ui上显示保存成功
返回;
}),
)
}
this.saveObject.subscribe((res)=>{
//成功
},(错误)=>{
//处理错误,而不需要返回可观察的
});
在rxjs团队的帮助下,我发现这是因为我需要在Tconfig文件中包含此选项
"lib": ["es2015"],
我正在用of()返回catchError()中的可观察值,我尝试了of(),但这并没有解决问题。在进行另一次检查后,它似乎根本不在管道中,完全移除管道并不能解决问题。@LachlanD抱歉,你这是什么意思。。?您是说错误没有在
catchError
中传播?哦,很抱歉澄清,我完全删除了管道,所以我刚刚从(myPromise)返回,但我仍然收到与以前相同的错误。@LachlanD Hmmm。。只是好奇,.then()
语句是否返回任何值?删除泛型怎么样?它最初没有return语句,但我放了一个return;更明确地说,这没有帮助。对于泛型,我假设您指的是可观察的