重试Ember Data的请求

时间:2016-03-24 16:57:35

标签: ember.js ember-data

我有一个带有rails后端的ember应用程序。

我有一个特定的错误,Rails可以返回(401)我希望Ember抓住并采取行动。在这种情况下,我想执行一个自定义方法(基本上修改请求cookie),然后再次发出请求。

现在我在顶级路由器上捕获此错误并强制整个应用程序使用window.location.reload()重新加载。显然这是一个可怕的黑客。我无法让router.refresh()工作,但无论如何这仍然是一个黑客。

理想情况下,我会更接近适配器,所以我可以采取行动。也许我可以通过覆盖handleResponse()而在适配器级别捕获它,但是如何从那里重试请求?

http://emberjs.com/api/data/classes/DS.RESTAdapter.html#method_handleResponse handleResponse确实传递了requestData,但我需要一些方法在适配器方法的上下文中执行请求,对吧?

2 个答案:

答案 0 :(得分:0)

如果路由的模型钩子被拒绝,则调出错误方法

你可以制作一个mixin并将它包装到你的路线上。

import RouteMixin from 'xx/mixins/route';

Ember.Route.extend(RouteMixin, {

})

在RouteMixin中添加一个动作

error: function() {          
   // this.transitionTo('/not-found');
}

错误的论据。

  • 服务器响应
  • 过渡课
  • 路线相关信息

您可以更改请求参数并重新路由。

答案 1 :(得分:0)

好吧,您可以在应用程序路径中处理此错误(我做了什么):

public static Socket userSocket;


public static Socket getSocket()
{
    return userSocket;
}
public static void setSocket(Socket newSocket)
{
    userSocket=newSocket;
}

它可能看起来像#34;太高级​​别",但它是你如何处理余烬中的错误。前段时间我写了一篇关于错误处理的post,你可以看一下你是否感兴趣。 当然,您可能希望扩展适配器来处理错误,但我不建议这样做。首先,您将无法访问适配器方法中的路由/控制器。其次,它不是" ember方式"。适配器应该返回一个promice,如果出现错误将被拒绝,它不应该以任何其他方式处理错误。