First of all, omit document resolver from route and keep only title resolver (last resolver) like this:
// Example Route
{
path: 'book/:id',
component: BookComponent,
resolve: {
title: BookTitleResolve
}
}
then re-write BookTitleResolve as follow:
export class BookTitleResolve implements Resolve<string> {
constructor(
private router: Router,
private bookResolver : BookResolve,
private sampleObservableServise : SampleObservableServise
) { }
// add 'async' to resolve method, so we can call resolvers in turn
// and wait for response before go to next resolver
async resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<string> {
// should convert resolver from observable to promise because of using 'await'
// So, we get bookObject before go to next resolver
const bookObject = await this.bookResolver.resolve(route, state).toPromise().then( res => {
return res;
});
// this is final resolver. Again, we should convert resolver from observable to promise
// because of using 'await'
return await this.sampleObservableServise.toPromise().then(val => {
return val
}, () => {
this.router.navigate(['/']);
return null
})
}
}
In conclusion, we should keep only last resolver in route object, in this case:
title: BookTitleResolve
then by using async/await, call other resolvers one by one in your desire order and use their data.