반응형
AngularJS - $q 약속을 올바르게 해결하기 위해 $apply가 필요한 이유는 무엇입니까?
글로벌 Javascript 객체에 지정된 설정 파라미터를 선택할 수 있는 작은 서비스를 각진 앱에 작성하려고 합니다.문서가 준비되지 않는 한 글로벌 구성 개체에 액세스하지 않습니다(HTML에 스크립트 요소가 삽입되는 순서를 보장할 수 없기 때문입니다).
그런데 왜 전화해야 하는지 모르겠어요.$apply
결의가 실제로 에 전파되다then
콜백
myModule.service('GlobalConfigService', ['$q', '$rootScope', function($q, $rootScope) {
var def = $q.defer();
$(document).ready(function() {
def.resolve(MyConfig.val);
$rootScope.$apply();
});
def.promise.then(function () {
console.log('I am called only when $apply() is called. Why?');
});
return def.promise;
}]);
각진 상태resolve()의 결과는 즉시가 아니라 $digest 사이클 내에서 비동기적으로 전파됩니다.즉, then()에 등록된 콜백은 다이제스트사이클이 발생했을 때만 호출됩니다.
코드에서는 Angular가 다이제스트 사이클에 들어가는 원인이 되지 않기 때문에 then() 콜백은 호출되지 않습니다.$apply()를 호출하는 것은 다이제스트 사이클을 실행하는 한 가지 방법입니다.다른 방법: ng-click으로 아무것도 하지 않는 버튼을 추가한 후 해당 버튼을 클릭하면 다이제스트 사이클이 발생하고 결과가 표시됩니다.
<button ng-click="">Force digest by clicking me</button>
https://stackoverflow.com/a/14657974/215945 도 참조해 주세요.
언급URL : https://stackoverflow.com/questions/14746314/angularjs-why-is-apply-required-to-properly-resolve-a-q-promise
반응형
'source' 카테고리의 다른 글
스프링 부트 시 모든 데이터베이스 관련 자동 구성 사용 안 함 (0) | 2023.04.02 |
---|---|
스프링 부팅과 함께 React App을 사용할 때 React-Router 문제 발생 (0) | 2023.04.02 |
리액트 라우터를 사용하여 페이지를 리디렉션하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.02 |
스프링 부트 응용 프로그램을 재시작하지 않고 런타임에서 로그 수준을 변경하는 방법 (0) | 2023.04.02 |
WooCommerce 디스플레이 구매 품목만 (0) | 2023.04.02 |