2017-09-06 1 views
1

각도 1.5.3 앱을 쓰고 있습니다. 내 메인 '홈'페이지 컨트롤러에서 $ http와 함께 2 개의 다른 끝점을 호출합니다. 두 종점은 서로 관련이 없으며 별도의 데이터 등이 있습니다. 두 종점에 오류가있는 경우 내 사용자에게 2 개의 오류 메시지가 표시됩니다. 메시지가 동일하거나 다를 수 있습니다 (예 : 인터넷에 연결되지 않는 경우가 있음).AngualrJS - 여러 HTTP 오류 메시지로 유용성을 관리하는 방법?

FirstService.request() 
    .then(handleFSSuccess) 
    .catch(handleError); 

SecondService.request() 
.then(handleSSSuccess) 
.catch(handleError) 

    function handleError(error) { 
     ErrorService.showErrorBanner(error); 
    } 

내가는 $ q.all 기능을 사용할 수 없습니다 또는 첫 번째 약속은 내가 ​​두 번째 계속하려면 실패하더라도 때문에 체인 약속드립니다.

하나 또는 모두 실패하더라도 관계없이 모든 약속을 실행하는 방법을 잘 모르겠습니다. 단 하나의 오류 배너 만 표시합니다. 하나의 오류 배너 만 표시하면 다른 오류 메시지가 표시되지 않을 수 있습니다 (하나 이상의 오류 배너가 표시되지 않도록).

하나만 표시되면 사용성이 더 좋습니다.

+0

이 hasErrorShown''와 같은 사용자 정의 부울 플래그를 사용하여 당신을 돕고, 희망 필터링 할 수 있습니다 해당 플래그가 false로 설정된 경우에만 showErrorBanner입니다. –

+1

showErrorBanner() 함수에서 배너가 표시되거나 존재하는지 먼저 확인한 다음 처리 할 수 ​​있지만 두 개의 배너를 인스턴스화하지 않고 단지 하나만 만들고 표시하거나 숨기거나 DOM에 플래그를 지정하거나 확인 – Ferus7

답변

1

FirstService.request()SecondService.request() 모두 약속을 반환하고 사용자는 then/catch으로 해결합니다.

오류가 발생하더라도 해결할 새로운 약속으로 포장합니다. 예를 들어 :

var deferred = $q.defer(); 

FirstService.request().then(function(_response){ 
    deferred.resolve(_response.data); 
}).catch(function(error){ 
    deferred.resolve({error:error}); // here we do not reject but pass error to resolve 
}); 

return deferred.promise; 

그래서 지금 당신은 $q.all을 사용할 수 있으며 만 해결 데이터 또는 객체 또는 오류 개체를 얻을 것이다.

한 곳에서 당신은 오류 키로 데이터를 (당신이 [RES1, RES2]을 얻을 수 있기 때문에)


그것이

관련 문제