我有一个典型的场景。
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
在发生此类失败时未被调用。
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
我以某种方式解决了这个问题。
之前,在我的适配器中,我拒绝承诺Promis' reason
对象。
现在,在出现错误响应的情况下,我宁愿发送一个包含errors
数组的对象,而不是失败原因对象。
因此,对象将作为有效负载传递给序列化程序中的normalizeFindAllResponse
。在那里,我检查errors
参数中是否存在payload
数组。
如果有这样的对象,则只返回一个空data
属性设置为空数组的空对象。
注意:从here获得了想法。