在 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 的强制服务器调用,在从服务器返回对象之前不会解析该会话。
希望对您有所帮助。
我在 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 的强制服务器调用,在从服务器返回对象之前不会解析该会话。
希望对您有所帮助。