私は、feathersjs と angular2/Rx を試してきました。私が達成しようとしているのは、任意の種類の CRUD の後に最新のアイテム セットを発行する Observable をサブスクライブできるように、feathersjs サービスをラップする angular2 サービスを構築することです。
それは基本的に機能します。ただし、その方法が非常に洗練されているとは思えません。入ってくるすべてのオブジェクトをラップおよびアンラップするのは効率的ではないようです。「すべてがストリームだ」と言い過ぎていませんか?
getService(){
let data$: Observable<any> = Observable.from([initialSetOfItems]);
let created$: Observable<any> = Observable.fromEvent(feathersService, 'created').map(o => {return {action: 'c', data: o}});
let updated$: Observable<any> = Observable.fromEvent(feathersService, 'updated').map(o => {return {action: 'u', data: o}});
let removed$: Observable<any> = Observable.fromEvent(feathersService, 'removed').map(o => {return {action: 'r', data: o}});
return data$
.merge(created$, updated$, removed$)
.scan((arr: any[], newObj) => {
switch (newObj.action){
case 'c':
return [].concat(arr, newObj.data);
case 'u':
let indexToUpdate = arr.findIndex((element) => (element.id === newObj.data.id));
if (indexToUpdate > -1){
arr[indexToUpdate] = newObj.data;
}
return arr;
case 'r':
return arr.filter(element => (element.id != newObj.data.id))
}
});
}
私はこれが独断的かもしれないことを知っています。我慢してください。Rx は頭を包み込むのが少し難しいです。
どうやってこれを達成しようとしますか?