在 ember 中尝试 findRecord 和 destroyRecord 时,DELETE 请求在 GET 请求之前完成

DELETE request is completing before GET request when trying to findRecord and destroyRecord in ember

我在 ember 2.6 中有以下代码; ember-数据2.6.1

import Ember from 'ember';

export default Ember.Route.extend({
    activate() {
        var route = this;
        var sessionId = localStorage.getItem('sessionId');
        if (sessionId) {
            localStorage.removeItem('sessionId');
            this.store.findRecord('session', sessionId).then(function found(session) {
                session.destroyRecord();
                route.transitionTo('index');
            });
        } else {
            this.transitionTo('sessions.new');
        }
    }
});

我有一个注销按钮,其 hbs 模板代码为:

<li>{{#link-to 'sessions.delete'}}{{fa-icon "fa-lock"}} Logout{{/link-to}}</li>

调用/sessions/delete时执行Route.extend代码!

我观察到的 REST 调用顺序是:

1) ***DELETE*** http://dozee.me:3000/api/sessions/<sessionId>
2) ***GET*** http://dozee.me:3000/api/sessions/<sessionId>

第二个 REST 请求抛出错误,因为到那时 session/cookie 已经清理完毕。

我期望的是 REST 调用的顺序实际上应该是相反的,但我无法弄清楚为什么不是这样!

如有任何指点和提示,我们将不胜感激;)

这可能是因为 ember 商店中已经有该会话并将该对象返回给您并稍后尝试通过调用 GET 来更新该对象。

这可能发生在删除之后,因为 promise 已经用存储对象解决了。

您可以做的是首先使用 peekRecord 在存储中查找会话对象,仅当在存储中找不到对象时才调用 findRecord。

其他方法是对会话进行 findRecord 的强制服务器调用,在从服务器返回对象之前不会解析该会话。

希望对您有所帮助。