2017-01-26 203 views
0

我必须在这里的东西超级明显...角2个RXJS观察到

public suggestedData$: Observable<string[]>; 
public suggestionStream = new Subject<string>(); 

nextSuggestion(){ 
    this.suggestionStream.next(this.query); 
} 

this.suggestionStream 
    .map(query => { 
     return this._someService.getSomeThings(query); 
    }); 

this.suggestionData$ = this.suggestionStream.subscribe(); 

然后在模板我想使用可观察到的是这样的:

<ul> 
    <li *ngFor="let suggestion of suggestionData$ | async">{{suggestion.something}}</li> 
</ul> 

的Visual Studio说:Type 'Subscription' is not assignable to type 'Observable<string[]>'.this.suggestionData$ = this.sug...

任何想法?

编辑:

this.suggestionStream 
    .map(query => { 
     console.log(query); 
      return this._someService.getSomeThings(query); 
     }) 
     .subscribe(res => { 
      console.log('res', res); 
     }); 

打印控制台:

res Observable {_isScalar: false, source: Observable, operator: MapOperator}

_someService看起来是这样的:

getSomeThings(query: string){ 

    let params = new URLSearchParams(); 
    params.set('query', query); 

    return this.http.get('https://api.../suggest', {search: params}) 
     .map(res => res.json() || []); 

} 

回答

0

this.suggestionStream.subscribe()的类型是认购,而不是一个观察的。所以我认为你想要达到的效果如下:

public suggestedData$: new Observable<string[]>; 
public suggestionStream = new Subject<string>(); 

nextSuggestion(){ 
    this.suggestionStream.next(this.query); 
} 

this.suggestionData$ = this.suggestionStream 
    .map(query => { 
    return this._someService.getSomeValues(query); 
    }); 

异步管道将执行订阅。

+0

那是我的想法...我在Visual Studio中遇到这个错误: 'Type'Observable >'不可分配给类型'Observable '。 类型'Observable '不可分配为键入'string []'。 类型'Observable '中缺少属性“长度”。“在控制台中没有错误,它似乎不起作用。 – nick

+0

尝试flatMap运算符而不是map。我也认为建议的数据应该是可观察的 theFreedomBanana