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

时间:2016-07-17 17:30:52

标签: javascript ember.js ember-data

我在ember 2.6中有以下代码; ember-data 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请求抛出并发生错误,因为到那时会话/ cookie已经被清除。

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

任何指针&amp;提示将不胜感激;)

1 个答案:

答案 0 :(得分:1)

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

这可能在删除后发生,因为已经使用商店对象解决了承诺。

你可以做的是先用peekRecord在商店中查找会话对象,只有在商店中找不到对象时才调用findRecord。

其他方式是使用一个forsed服务器调用findRecord for session,它不会被解析,直到从服务器返回对象。

希望这会对你有所帮助。