首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当ember的模型钩子的请求失败时会发生什么

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

Stack Overflow用户
提问于 2017-07-14 20:53:22
回答 1查看 138关注 0票数 0

我有一个典型的场景。我的Route-1模型钩子看起来像这样。

代码语言:javascript
复制
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

堆栈也不显示任何相关信息

代码语言:javascript
复制
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都没有被调用。

任何帮助都是非常感谢的。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-07-24 20:47:38

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

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

注意:我是从here得到这个想法的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45103533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档