从可观察数组中获取一个值

时间:2018-05-21 17:52:28

标签: angular rxjs observable

如何编写一个带Observable<T[]>并返回Observable<T>的函数?

例如,我有两种方法:

getTransactions(): Observable<Transaction[]>{
        ...
    }
getTransaction(id: number): Observable<Transaction>{
    return this.getTransactions().pipe(find(txn => txn.id === id));
}

我得到的错误是'Observable'类型不能分配给'Observable'类型。类型'Transaction []不能分配给'Transaction'类型。 “交易[]”类型中缺少属性“id”。

据我所知,可观察管道函数(map,single,find,max等)属于数据流(即,当observable随时间发出多个项目时),并且当可观察的发出时无用单个项目(恰好是一个数组)。

编写getTransaction(id)函数的正确方法是什么?我试过了:

let transactions : Transaction[] = [];
this.getTransactions().subscribe(txns => transactions=txns);
return of(transactions.find(txn => txn.id === id));

但是这会导致错误,说“事务”未定义。我对Angular等很新,所以任何指令都很有帮助。谢谢!

Stackblitz

我正在使用:
Angular CLI:6.0.3
角度:6.0.1
rxjs:6.1.0

1 个答案:

答案 0 :(得分:6)

您需要将可观察值视为数组流,而不是尝试将其视为项目流流。您的observable中的值是单个数据点,每个数据点都包含自己的数组。

TestJMSReceiverImpl

您在此处所做的是将流中的每个数组映射到具有与参数匹配的ID的任何项目。