当ember的模型钩子的请求失败时会发生什么

时间:2017-07-14 12:53:22

标签: ember.js ember-data ember-cli

我有一个典型的场景。 model() { return Ember.RSVP.hash({ posts: this.store.findAll('post'), authors: this.store.findAll('author') }); } 的模型钩子看起来像这样。

Route-2

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

但是如果请求失败,我的控制台(chrome)会出现Unhandled promise error detected错误。(每个findAll两次) 我的错误跟踪系统将其报告为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

我无法弄清楚导致错误的原因是因为promise normalizeFindAllResponse已经解决了。而且灰烬告诉我,我没有处理好这个承诺!

我尝试过各种各样的捕获/拒绝代码,但它永远不会被调用。因为承诺已经解决了。所以,它不能被拒绝。

那么这个错误来自哪里!!我没有线索。适配器返回后没有错误。

我唯一能找到的是我的序列化程序FOR X IN (SELECT a, b from table) LOOP在发生此类失败时未被调用。

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

1 个答案:

答案 0 :(得分:0)

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

之前,在我的适配器中,我拒绝承诺Promis' reason对象。 现在,在出现错误响应的情况下,我宁愿发送一个包含errors数组的对象,而不是失败原因对象。 因此,对象将作为有效负载传递给序列化程序中的normalizeFindAllResponse。在那里,我检查errors参数中是否存在payload数组。 如果有这样的对象,则只返回一个空data属性设置为空数组的空对象。

注意:从here获得了想法。