Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember——JSON API适配器错误处理_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript Ember——JSON API适配器错误处理

Javascript Ember——JSON API适配器错误处理,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,当API请求导致404错误时,我想采取特定的操作。我已经了解到,适当的方法是处理应用程序适配器中的错误,如下所示: handleResponse: function(status, headers, payload){ if(status === 404 && payload.errors){ //handle error } return this._super(...arguments); } return this.get('s

当API请求导致404错误时,我想采取特定的操作。我已经了解到,适当的方法是处理应用程序适配器中的错误,如下所示:

  handleResponse: function(status, headers, payload){
    if(status === 404 && payload.errors){
      //handle error
    }
    return this._super(...arguments);
  }
return this.get('store').find('user', userId).then((user) => {
    this.set('user', user);
}).catch((reason) => {
    var possible404 = reason.errors.filterBy('status','404');
    if(possible404.length !== 0) {
      // Handle 404 error
    }
});

问题是,一旦我设置了适配器,它就无法完成页面加载,因此我可以处理页面本身的错误。相反,它会自动将我带到某个错误路径,该路径只显示“适配器错误”。如何停止/覆盖此行为?

也许您可以根据请求处理此行为,如下所示:

  handleResponse: function(status, headers, payload){
    if(status === 404 && payload.errors){
      //handle error
    }
    return this._super(...arguments);
  }
return this.get('store').find('user', userId).then((user) => {
    this.set('user', user);
}).catch((reason) => {
    var possible404 = reason.errors.filterBy('status','404');
    if(possible404.length !== 0) {
      // Handle 404 error
    }
});

虽然这不是您想要的解决方案,但此替代方案将允许您自定义更多。顺便说一句,自动行为似乎是对404的启动,因此如果您想覆盖该行为,请读取它。

结果表明,我需要调整应用程序适配器中的HandlerResponse钩子,以将新的requestData参数传递给super方法

handleResponse (status, headers, payload, requestData) {
    return this._super(status, headers, payload, requestData);
},
然后我把问题的第一行代码从

handleResponse: function(status, headers, payload) {


然后我就能够捕捉并处理错误了

谢谢,我刚才又想出了另一个答案,但忘了我已经发布了这个。我会把我想出的答案贴出来。