2017-07-14 63 views
0

我有一个典型的场景。 我的模型钩Route-1看起来像这样。当烬模型挂钩的请求失败时会发生什么

model() { 
    return Ember.RSVP.hash({ 
    posts: this.store.findAll('post'), 
    authors: this.store.findAll('author') 
    }); 
} 

如果我在Route-2并导航到Route-1它会调用model钩。 如果我的商店已经有数据,则两个findAll请求都已解析,触发RSVP.hash来解决。

但是,如果申请失败,我得到我的控制台(铬)undefined错误。(两次,每次的findAll的) 我的错误跟踪系统,报告为Unhandled promise error detected

栈表明没有相关的信息要么

defaultDispatch @ ember.debug.js:18008 
dispatchError @ ember.debug.js:17987 
onerrorDefault @ ember.debug.js:31634 
trigger @ ember.debug.js:58713 
(anonymous) @ ember.debug.js:59614 
invokeWithOnError @ ember.debug.js:346 
flush @ ember.debug.js:405 
flush @ ember.debug.js:529 
end @ ember.debug.js:599 
(anonymous) @ ember.debug.js:1165 

我无法弄清楚是什么原因造成的错误被抛出,因为承诺findAll已经得到了解决。而余烬告诉我,我没有履行诺言!

我试着每次都把catch/reject代码放进去,但它永远不会被调用。因为这个承诺当然已经解决了。所以,它不能被拒绝。

那么这个错误来自哪里!我没有任何线索。在适配器返回之前没有错误。

我唯一能找到的就是我的序列化程序normalizeFindAllResponse在发生这种故障时不会被调用。

任何帮助,非常感谢。谢谢!

+0

您可能需要查找用于加载'post'和'author'模型以查找潜在错误的adpater和serializer。堆栈跟踪错误是否有任何可扩展选项?因为它没有提供任何线索 – kumkanillam

+0

我检查了它。没有错误。适配器只是发送它所得到的(在这种情况下拒绝了'reason')。序列化程序从未被调用过。 –

+0

至于堆栈跟踪,它是'ember's'代码,它只是调用错误。没有相关信息,我可以担保。 –

回答

0

我以某种方式解决了这个问题。

之前,在我的适配器中,我拒绝Promis'reason对象的承诺。 现在,如果出现错误响应,我宁可发送一个包含errors数组的对象,而不是失败原因对象。 因此,该对象将作为有效负载传递到串行器中的我的normalizeFindAllResponse。在那里我检查我们的​​参数中是否存在errors阵列。 如果有这样的对象,那么只需返回一个空对象data属性设置为空数组。

注意:从here得到了主意。

相关问题