2013-08-27 1 views
2

다음과 같이 find 메소드를 사용하여 코드를 작성했습니다. 어댑터는 RESTAdapter입니다.약속의 거절 처리기에서 오류의 원인을 어떻게 알 수 있습니까?

App.SessionManager = Em.Object.extend({ 
    userIdChanged: function() { 
    App.User.find(this.get('userid')).then(
     function(user) { 
     /* process something */ 
     }, 
     function(error) { 
     /* rejection handler */ 
     /* I want to know what error returned by the server here.*/ 
     /* but how? */ 
     } 
    ); 
    }.observes('userid'), 
}); 

제 서버가 오류 (예 : 401)를 반환하면 거부 처리기가 호출됩니다. 그러나 handler의 인수에는 오류 정보가없는 것으로 보입니다. 거절 처리기의 오류 이유를 어떻게 알 수 있습니까?

답변

2

서버에서 반환 한 오류 처리는 아직 ember 데이터로 완전히 구현되지 않았습니다. 은 참고로는 엠버 - 데이터에 대한 this blog post에 명시된 :

우리는 오류 처리를 만들고 싶어하고 클라이언트와 서버 갈등을 다루는 것은 단단한 바위. Paul Chavard의 요청은 현재 열려 있으며 오류 처리의 시작점과 같습니다. 가까운 장래에 더 많은 발전이있을 것입니다.

그러나 그 동안 그 정보를 얻으려면 할 수있는 해결 방법이 있습니다. 예를 들어

:

Ember.RSVP.configure('onerror', function(error) { 
    console.log(error.message); 
    console.log(error.stack); 
}); 

또는 그 정보를 얻기 위해 더러운 해킹을 사용합니다. 엠버 - 데이터 후드 jQuery를 사용하기 때문에 당신은 ajaxError에 가입 할 수 있습니다 :

$(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) { 
    // this will trigger anytime there is an error 
}); 

는 도움이되기를 바랍니다.

0

당신은 또한이 메소드를 오버라이드 (override) 할 수 있습니다

becameInvalid: function(record) { 
    // you can get errors just by doing record.errors, error keys must match 
    // the name of a field that you have defined in your model 
} 

과 : 경우 뭔가의

becameError: function(record) { 
} 

오류가 발생한 서버에서 일어났다. 나는 단지 약속의 오류를 처리하기를 원한다는 것을 알았지 만, 그것은 내가 다루지 않은 것이 다른 것입니다. becomeError가 해고 당했을 수 있습니다.

UPDATE :

난 그냥 당신을 도울 수있는 흥미로운 발견 : 새로운 라우터에 Ember-Data handling 401’s 덕분에, 나는 모든 새로운 기능을 사용할 수있는 기회가 없었어요,하지만 그들은 정말 멋진 보인다.

관련 문제