2016-03-06 65 views
3

我想在API請求導致404錯誤時採取特定操作。我讀過的撥款方式做,這將在應用適配器處理錯誤象下面這樣:Ember - JSON API適配器錯誤處理

handleResponse: function(status, headers, payload){ 
    if(status === 404 && payload.errors){ 
     //handle error 
    } 
    return this._super(...arguments); 
    } 

的問題是,當我設置適配器,它將不能完成加載頁面,所以我可以處理頁面本身的錯誤。相反,它會自動帶我到一些錯誤路由,只是說「適配器錯誤」。我怎樣才能停止/重寫這種行爲?

回答

2

原來我需要調整應用程序適配器中的handleResponse掛鉤以將新的requestData參數傳遞給super方法。

handleResponse (status, headers, payload, requestData) { 
    return this._super(status, headers, payload, requestData); 
}, 

然後我改變了代碼的第一行,我的問題從

handleResponse: function(status, headers, payload) { 

handleResponse: function(status, headers, payload, requestData) { 

當時我能夠捕獲並處理錯誤

2

也許你可以處理它的請求的基礎上象下面這樣:

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上的application-error substates踢,所以如果你想覆蓋行爲,給它一個閱讀。

+1

謝謝,我前一段時間提出了另一個答案,但忘了我已經發布了這個。我會發布我提出的答案。 – TheCompiler