如何解决从Ember js中STORE的find()方法获得的ember promise数组的响应?

时间:2014-03-13 09:27:28

标签: rest ember.js ember-data promise

我有/products的模型钩子,如下所示:

App.ProductsRoute = Ember.Route.extend({
    model: function(controller) {
        return this.find.store('product');
    }
});

这很好用,可以在RESTAdapter支持的JSON约定中获取产品列表,我可以使用{{#each}}帮助器在products模板中显示列表。

但是当我收到一些http错误(比如说500内部服务器错误)时,应用程序会在JSON.parse中出现错误。我无法弄清楚如何在这里使用onSuccess和onFail回调来正确解析promises(并有效地处理错误)。非常感谢您对此主题的任何帮助。

我试过了,但它不起作用。即使服务器关闭,流程也永远不会达到onFail方法。

App.ProductsRoute = Ember.Route.extend({
    model: function(controller) {
        var onSuccess = function(products) {
            return products;
        };
        var onFail = function(reason) {
            alert('Error occured !');
            return [];
        };

        return this.find.store('product').then(onSuccess, onFail);
    }
});

2 个答案:

答案 0 :(得分:2)

您可以添加一个简单的.then,其中第一个回调基本上是onSuccess,第二个是onFail

App.ProductsRoute = Ember.Route.extend({
    model: function(controller) {
        return this.store.find('product').then(function(response) {
            alert('working!'); //(you can return the models here if all is good)
        }, function() {
            alert('broken!');
        });
    }
});

答案 1 :(得分:1)

我认为你应该告诉转换为中止,因为模型钩子可能需要返回一个真实的对象。

为此,请使用模型钩子的第二个参数(它是过渡对象)。