Typescript 如何使外部可观测从内部可观测的错误或嵌套可观测的成功中觉察出来?
如何使外部可观测从内部可观测的错误或嵌套可观测的成功中觉察出来 为什么Typescript 如何使外部可观测从内部可观测的错误或嵌套可观测的成功中觉察出来?,typescript,observable,Typescript,Observable,如何使外部可观测从内部可观测的错误或嵌套可观测的成功中觉察出来 为什么onNext和onCompleted在内部可观察的中未定义 public updateDocument(item: Document): Observable<any> { this.firstUseOfflineContainer(); let afiEdit = this.offlineData.afi.edit; //outer observable return Obser
onNext
和onCompleted
在内部可观察的中未定义
public updateDocument(item: Document): Observable<any> {
this.firstUseOfflineContainer();
let afiEdit = this.offlineData.afi.edit;
//outer observable
return Observable.create(observer => {
//inner observable
this.dataService.updateRequest(item).subscribe(
(next) => {
console.log("ok");
},
(err) => {
afiEdit.headers.push(item);
//how to throw error to outer observable
},
() => {
observer.onNext(item);
observer.onCompleted();
}
);
return () => console.log('cleanup message')
});
}
公共更新文档(项目:文档):可观察{
this.firstUseOfflineContainer();
设afiEdit=this.offlineData.afi.edit;
//外部可观测
返回可观察的。创建(观察者=>{
//内部可观测
this.dataService.updateRequest(项).subscribe(
(下一步)=>{
控制台日志(“ok”);
},
(错误)=>{
afiEdit.headers.push(项目);
//如何将误差抛给外部可观测对象
},
() => {
观察员:onNext(项目1);
observer.onCompleted();
}
);
return()=>console.log('cleanup message')
});
}
我的理解是,您的目标只是在外部可观察对象失败时,在外部可观察对象中抛出一个错误
因此,代码将如下所示:
//Define the inner observable (probably an http call in your case)
//I mocked your call failing or passing with a random 50/50 chance
var innerObservable = new Rx.Observable(observer => {
var didMockCallFail = Math.random() < .5;
if(didMockCallFail){
console.log('Inner observable call failed');
observer.error(new Error('Call failed!'));
} else {
console.log('Inner observable call returned data');
observer.next({lolData: 'I am data'});
}
})
//define the outer observable which just calls the inner observable
var outerObservable = new Rx.Observable(observer => {
innerObservable.subscribe(
data => observer.next(data),
err => observer.error(err)
)
});
outerObservable.subscribe(
next => console.log('Got data!'),
err => console.error('lol fail')
);
如果你有任何问题,请告诉我 您不应该在上次订阅中订阅outerObservable
而不是innerObservable
?
function makeObs(someParam){
return new Rx.Observable(observer => {
observer.next(someParam);
})
}