【问题标题】:Angular 2 RXJS observableAngular 2 RXJS 可观察
【发布时间】:2017-06-11 19:40:06
【问题描述】:

我一定遗漏了一些非常明显的东西......

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

然后在模板中我想像这样使用 observable:

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

Visual Studio 说:Type 'Subscription' is not assignable to type 'Observable&lt;string[]&gt;'. for 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() || []);

}

【问题讨论】:

    标签: angular typescript rxjs reactive-programming


    【解决方案1】:

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

    异步管道将执行订阅。

    【讨论】:

    • 我的想法...我在 Visual Studio 中收到此错误:Type 'Observable&lt;Observable&lt;any&gt;&gt;' is not assignable to type 'Observable&lt;string[]&gt;'. Type 'Observable&lt;any&gt;' is not assignable to type 'string[]'. Property 'length' is missing in type 'Observable&lt;any&gt;'. 控制台中没有错误,它似乎不起作用。
    • 尝试使用 flatMap 运算符而不是 map。我也认为建议数据应该是 Observable
    • 尝试 'Observable>' - 只需在 th [] 内添加 - 它的任何平均数组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多