2017-06-21 24 views
1

我无法让我的函数getData多次运行,第一次调用getData时,字段名称为'a',数据从returnData返回,块getData的.subscribe内部被击中。第二次用一个字段'b'调用getData时,returnData中的所有内容都按预期工作,但getData的.subscribe内部的块根本没有被打中。订阅从函数返回的Observable只能在第一次运行

private getData(field: string): void { 
    this.returnData(field)         
    .subscribe((data) => { 
    //Handle Data 
    //This block is only hit the first time getData is called 
    });} 

private returnData(field: string): Observable <SomeObj> {   
    let subj: Subject <SomeObj> = new Subject <SomeObj>();  
    const obj: SomeObj = new SomeObj(field); 
    this.someDataServive.someFunction(field) 
    .subscribe(
    (data) => { 
     //set properties on obj from data and emit obj 
     subj.next(obj); 
     //This block is always hit every time getData is called, and the 
     // obj returned from here is correct 
    },                
    (err) => { 
     subj.next(obj); 
    });                
    return (subj.asObservable());           
} 
+0

添加打字稿的标签以获得语法高亮,它已经很难与所有评论 –

+0

阅读我与代码中的plunker为更好的可读性这里:https://plnkr.co/edit/pylvkE6QBnqjd81nsWlS? p =目录 – ahetman

回答

0

原来,问题出在我对于.subscribe和什么时候.map的缺乏了解;另外主题是不必要的。将returnData的订阅更改为映射是持续打击returnData中的.subscribe块所需的全部内容。

private returnData(field: string): Observable <SomeObj> {    
    const obj: SomeObj = new SomeObj(field); 
    return this.someDataServive.someFunction(field) 
    .map(
    (data) => { 
     obj.data = data; 
     return obj; 
    }                          
} 
相关问题