Angular.js에서 약속이 이행 될 때 항상 일부 코드를 실행하는 방법
내 Angular.js 응용 프로그램에서 일부 비동기 작업을 실행하고 있습니다. 시작하기 전에 모달 div로 응용 프로그램을 덮은 다음 작업이 완료되면 작업 성공 여부에 관계없이 div를 제거해야합니다.
현재 나는 이것을 가지고있다 :
LoadingOverlay.start();
Auth.initialize().then(function() {
LoadingOverlay.stop();
}, function() {
LoadingOverlay.stop(); // Code needs to be duplicated here
})
잘 작동하지만 다음과 같은 의사 코드와 같은 더 깨끗한 것을 선호합니다.
LoadingOverlay.start();
Auth.initialize().finally(function() { // *pseudo-code* - some function that is always executed on both failure and success.
LoadingOverlay.stop();
})
나는 그것이 매우 일반적인 문제라고 생각하기 때문에 그것을 할 수 있다고 생각했지만 문서에서 아무것도 찾을 수 없습니다. 할 수 있는지 아십니까?
이 기능은 이 풀 리퀘스트 에서 구현되었으며 이제 AngularJS의 일부입니다. 처음에는 "항상"이라고 불렸고 나중에로 이름이 바뀌 었 finally
으므로 코드는 다음과 같아야합니다.
LoadingOverlay.start();
Auth.initialize().then(function() {
// Success handler
}, function() {
// Error handler
}).finally(function() {
// Always execute this on both error and success
});
주 이후 있다는 finally
예약 된 키워드가, 그것은 (예 : IE와 안드로이드 브라우저와 같은) 특정 브라우저에 침입하지 않도록하는 문자열 수 있도록해야 할 수도 있습니다 :
$http.get('/foo')['finally'](doSomething);
AngularJS 버전 1.1.5와 함께 Umbraco 버전 7.3.5 백엔드를 사용하고 있으며이 스레드를 찾았습니다. 승인 된 답변을 구현할 때 오류가 발생했습니다.
xxx (...). then (...). finally는 함수가 아닙니다.
그러나 작동 한 것은 always
. 이전 버전의 AngularJS를 사용하는 다른 사람이이 스레드를 찾고 finally
대신이 코드를 사용할 수없는 경우
LoadingOverlay.start();
Auth.initialize().then(function() {
// Success handler
}, function() {
// Error handler
}).always(function() {
// Always execute this on both error and success
});
angularJS를 사용하지 않는 사람들과 오류를 잡아도 괜찮다면 (.finally ()가 그렇게하는지 확실하지 않은 경우), .catch (). then ()을 사용하여 중복 된 코드를 피할 수 있습니다.
Promise.resolve()
.catch(() => {})
.then(() => console.log('finally'));
The catch() might end up being useful anyway for logging or other cleanup. https://jsfiddle.net/pointzerotwo/k4rb41a7/
I would use ngView to render the content of the page and trigger the removal of you modal on the event $viewContentLoaded. See http://docs.angularjs.org/api/ng.directive:ngView for that event and http://docs.angularjs.org/api/ng.$rootScope.Scope for the $on event listener.
'programing' 카테고리의 다른 글
CSS : 상단 대 여백 상단 (0) | 2020.09.21 |
---|---|
Eclipse에서 특정 인터페이스를 구현하는 클래스를 찾는 방법은 무엇입니까? (0) | 2020.09.21 |
쉘의 가변 보간 (0) | 2020.09.21 |
배열에서 가장 높은 값의 인덱스 반환 (0) | 2020.09.20 |
onclick 열린 창 및 특정 크기 (0) | 2020.09.20 |