I needed to cancel the route on promise rejection and stay on the current page without redirecting to default/error page, I have tried different ways of rejecting the promise but ended up resolving the route or redirected to the default route.
@Injectable()
export class ModelResolver implements Resolve<MyModel> {
    constructor(private router: Router) {
    }
    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<any> {
        let params: any = route.params;
        let model: MyModel= new MyModel();
        return model.init().then((obj: MyModel) => {
                    return obj;
                }).catch((err: any) => {
                    Promise.reject({message: err , ngNavigationCancelingError: true});
            });
    }
}
reject({message: err , ngNavigationCancelingError: true}); // redirects to my default route
return Observable.throw({message: err , ngNavigationCancelingError: true}); // redirects to the current route without cancelling
resolve(null); or return Observable.empty() // redirects to the current route without cancelling