Bob*_*ose 4 observable rxjs angular
你如何编写一个带有Observable<T[]>和返回的函数Observable<T>?
例如,我有两种方法:
getTransactions(): Observable<Transaction[]>{
...
}
getTransaction(id: number): Observable<Transaction>{
return this.getTransactions().pipe(find(txn => txn.id === id));
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是'Observable'类型不能分配给'Observable'类型.类型'Transaction []不能分配给'Transaction'类型."交易[]"类型中缺少属性"id".
据我所知,可观察管道函数(map,single,find,max等)属于数据流(即,当observable随时间发出多个项目时),当observable发出单个项目时,它们无用(这恰好是一个数组)立刻.
编写getTransaction(id)函数的正确方法是什么?我试过了:
let transactions : Transaction[] = [];
this.getTransactions().subscribe(txns => transactions=txns);
return of(transactions.find(txn => txn.id === id));
Run Code Online (Sandbox Code Playgroud)
但这会导致错误,说"事务"未定义.我对Angular等很新,所以任何指令都很有帮助.谢谢!
我正在使用:
Angular CLI:6.0.3
Angular:6.0.1
rxjs:6.1.0
您需要将可观察值视为数组流,而不是尝试将其视为项目流流.您的observable中的值是单个数据点,每个数据点都包含自己的数组.
getTransaction(id: number): Observable<Transaction>{
return this.getTransactions().pipe(
map(txs => txs.find(txn => txn.id === id))
);
}
Run Code Online (Sandbox Code Playgroud)
你在这里做的是将流中的每个数组映射到具有与参数匹配的ID的任何项目.
| 归档时间: |
|
| 查看次数: |
6499 次 |
| 最近记录: |