在全局应用程序路由的 sessionAuthenticated 之后预加载数据

preload data after sessionAuthenticated at application route globally

在登录路由调用自定义 authenticate 方法后,在应用程序级别 (ApplicationRouteMixin) 触发操作 sessionAuthenticated

即:

sessionAuthenticated() {
    this._super(...arguments);

    let _this = this;
    return this_loadUser().catch(function() {
        _this.get('session').invalidate();

    });

}

这可行,但是,如果我想预加载额外数据,sessionAuthenticated 不会等到所有承诺都已解决。 由于 beforeModelafterModel 钩子最初已经在应用程序路由级别,因此唯一可靠的工作方式是在会话处于刷新页面时活动(已登录)调用 beforeModel 和 afterModel 挂钩。

简而言之;在登录路由时,调用 authenticate,在成功验证后,sessionAuthenticated 操作在应用程序路由中被触发,但是 需要在应用程序路由级别全局预加载额外数据。 sessionAuthenticated 不会等到所有承诺都已解决。

注意:答案是正确的,但是,对 super 的调用将不起作用,因为 Ember 不支持在异步块上调用 super,只支持同步。

尝试在你的承诺 fulfilled/rejected 之后致电 this._super 。像这样:

sessionAuthenticated() {   
    let _this = this;
    return this_loadUser().catch(function() {
        _this.get('session').invalidate();
    }).finally(function() {
        _this._super(...arguments);
    });

}