我有一个典型的场景。我的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进行解析。
但如果请求失败,我会在控制台(Chrome)中得到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 我无法找出是什么导致抛出错误,因为promise findAll已经解决了。ember告诉我,我还没有处理好承诺!
我试着把catch/reject代码放在任何地方,但是它从来没有被调用过。因为这个承诺当然已经解决了。因此,它不能被拒绝。
那么这个错误是从哪里来的!毫无线索。在适配器返回之前不会出现错误。
我唯一能找到的就是在我的序列化程序中,无论何时发生这样的失败,normalizeFindAllResponse都没有被调用。
任何帮助都是非常感谢的。谢谢!
发布于 2017-07-24 20:47:38
我以某种方式解决了这个问题。
之前,在我的适配器中,我用promise的reason对象拒绝了promise。现在,在出现错误响应的情况下,我发送的是包含errors数组的对象,而不是失败原因对象。因此,该对象将作为有效负载在序列化程序中传递给我的normalizeFindAllResponse。在这里,我检查payload参数中是否存在errors数组。如果有这样对象,那么只需返回一个空对象,并将data属性设置为空数组。
注意:我是从here得到这个想法的。
https://stackoverflow.com/questions/45103533
复制相似问题