如何编写一个带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等很新,所以任何指令都很有帮助。谢谢!
我正在使用:
Angular CLI:6.0.3
角度:6.0.1
rxjs:6.1.0
答案 0 :(得分:6)
您需要将可观察值视为数组流,而不是尝试将其视为项目流流。您的observable中的值是单个数据点,每个数据点都包含自己的数组。
TestJMSReceiverImpl
您在此处所做的是将流中的每个数组映射到具有与参数匹配的ID的任何项目。