Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何使外部可观测从内部可观测的错误或嵌套可观测的成功中觉察出来?_Typescript_Observable - Fatal编程技术网

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);
  })
}