2017-01-26 200 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