programing

Angular.js에서 약속이 이행 될 때 항상 일부 코드를 실행하는 방법

nasanasas 2020. 9. 21. 07:47
반응형

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.

참고URL : https://stackoverflow.com/questions/16040263/how-to-always-run-some-code-when-a-promise-is-fulfilled-in-angular-js

반응형