繁体   English   中英

可观察到的Angular 2 RXJS

[英]Angular 2 RXJS observable

我一定在这里错过了一些非常明显的东西...

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() || []);

}

this.suggestionStream.subscribe()的类型为Subscription,不是Observable。 因此,我认为您要实现的目标如下所示:

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

异步管道将执行订阅。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM