What I'm doing:
I have an angular resolve guard on my route /work/:slug
. I would like to instantly resolve that guard with an Observable of local data, while remote data is being fetched over the network. After the network request is successful, replace that local data with the remote.
Notes:
- My local data is
tombstoneDefault.data
which is just a javascript array. - I use Observable.from() to wrap my local data.
- My network request on
this.someService.getData()
will return an Observable.
Question, How do I chain off of [Observable.from][1]
my research leads me to switchMap or how can I accomplish this using different operators in RXJS ?
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve } from '@angular/router';
import { POST_TABLE as tombstoneDefault } from './work-post.content';
import { Observable } from '[rxjs][1]/Observable';
@Injectable()
export class WorkPostResolve implements Resolve<any> {
constructor() {
}
resolve(route: ActivatedRouteSnapshot): any {
// get tombstoneDefault data
// then replace with this.someService.getData(route.params.id)
return Observable.from(tombstoneDefault.data).filter(post => {
return post.slug === route.params.slug;
}).switchMap((result) => { // this errors out
// this.someService.getData(route.params.id)
});
}
}