2017-05-23 4 views
0

AngularJS 학생의 경우 '어리석은'질문이지만 혼란 스럽습니다.쉬운 각도 : 왜 순서가 바뀌나요?

변수를 console.logging 할 때 var result이 GET 등의 약속이고, .then() 변수가 asignin과 같은 일부 작업을 수행한다고 가정 해 봅니다.

var result = ... ; 

    $scope.number = {}; 


    result.then(function(data) { 
     $scope.number = 5; 

     console.log($scope.number); 
    }); 


console.log($scope.number); 

오케이! 그래서 나에게,이 두 번째 .LOG 비를 인쇄 할 수

5 
5 

이 경우에 (

5 
undefined 

(경우에 나는이 기능이나 약속 외부 달러 (A $) 범위 변수를 초기화)를 인쇄한다 ,

) 함수 외부 -defined 전역 변수 그래서 내가 얻을 :

undefined 
5 

inner (5) 변수 앞에 outter $scope.number이 인쇄되는 이유는 무엇입니까?

약속 내에서 GET을 얻은 후에 변수를 초기화하고 나중에 초기화 된 var를 사용하고 싶습니다.

감사합니다. =) 학습 속도가 빨라집니다! 그 후

var result = ... ; 

오른쪽, 당신은 약속의 .then 방법에 함수를 전달합니다 :

result.then(...) 

그리고 바로

답변

0

이해하기 위해 중요한 것은 다음 즉시 약속을 반환하는 것입니다 그 후에는 다음을 수행하십시오.

console.log($scope.number); 

나중에 - 한 번 비동기 (HTTP 요청 등) ronous 작업이 완료되고 약속은 해결 - 당신이 .then에 전달 함수는 마지막으로 실행 :

function(data) { 
    $scope.number = 5; 

    console.log($scope.number); 
} 

그래서 약속은 비동기 동작을 관리 할 수 ​​있도록하기 위해 존재한다. 다음과 같이 여러 개의 비동기 기능을 관리해야 할 때 실제로 빛을 발합니다.

asyncFunction1().then(function() { 
    // This executes after asyncFunction1 completes 
    return asyncFunction2(); 
}).then(function() { 
    // This executes after asyncFunction2 completes 
}); 
+0

좋아, 지금은 더 잘 이해합니다. 재귀 함수에 '비슷하게'보일 것입니다. 부모 함수는 자식 함수가 끝날 때까지 대기합니다. $ scope.number를 계속 사용하려면 HTTP.GET을 반환하는 숫자라고 가정 해 봅시다. 다른 함수와 연결해야합니까? 예를 들어, 당신이 그랬던 것처럼? asyncFunction1 '()을 (기능 (데이터) {$ scope.number = 데이터; 창 asyncFunction2의 ($ scope.number) }).. 다음 (함수() { CONSOLE.LOG ($ 범위. number); }); ' 다시 간단한 코드 인 1st initialises number와 second로 처리 할 수 ​​있습니다. – ButterySAM777

+0

$ scope를 처리하는 다른 방법.약속 안에서 변수는 나중에 연속적으로 처리 할 수 ​​있습니까? 고맙습니다! – ButterySAM777

+0

당신이하고있는 방식이 올바른 것처럼 보입니다. '.then'에 전달한 함수 안에 $ scope.number를 설정하고 있으므로 http 응답이 끝나기를 기다리고 있습니다. 처음 완료된 후에 두 번째 http 요청을해야하는 것처럼 첫 번째 함수에서 다른 약속을 반환하는 경우에만 두 번째 함수가 필요합니다. –