2016-07-21 4 views
0

AngularJS를 처음 사용합니다. "response.data"응답을 일반적인 함수로 반환하려면 어떻게해야합니까? $http이 약속을 생성하기 때문에 함수가 끝나면 서버 응답을 반환하지 않습니다. 내 컨트롤러에서

내가 가진 :

this.message2 = function() {     
    $http({ 
     url : 'dataset_of_model', 
     method : "POST", 
     data : { 
      'experiment' : 'rcp85', 
      'model' : 'HadGEM2-ES', 
      'frequency' : 'day' 
     } 
    }).then(function(response) { 
     console.log('qui'); 
     console.log(response.data);        
     return response.data; 
    }, function(response) { 
     //fail case 
     console.log(response); 
     console.log(fallito); 
     return response; 
    }); 
}; 

내가 할 경우이 데이터 전에 반환하기 때문에

this.message2 = function() { 

    var = temp; 

    $http({ 
     url : 'dataset_of_model', 
     method : 'POST', 
     data : { 
      'experiment' : 'rcp85', 
      'model' : 'HadGEM2-ES', 
      'frequency' : 'day' 
     } 
    }).then(function(response) { 
     console.log('qui'); 
     console.log(response.data);         
     temp = response.data; 
    }, function(response) { 
     //fail case 
     console.log(response); 
     console.log(fallito); 
     return response; 
    }); 

    return temp;    
}; 

반환 temp 데이터가없는, 내가 예를 들어 10 기다릴 경우에도 돌아 오기 전 몇 초.

어떻게 동기식으로 데이터를 반환 할 수 있습니까?

감사합니다.

+0

나는 방법이 없다 생각합니다. Javascript는 단일 스레드이며 특정 기능을 완료 할 때까지 기다리지 않아도됩니다. –

+1

[비동기 호출의 응답을 어떻게 반환합니까?] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call)의 가능한 복제본 –

답변

-1

왜 그렇게하고 싶지는 모르겠습니까? 첫 번째 옵션에서 response.data가 반환됩니다. 또한 $ http 앞에 return을 추가해야합니다 (약속을 반환하는 방식). 그러나 응답과 동기화할 일은 .then 블록에 있어야합니다. 예를 들어, 득점 한 모든 목표에 대한 응답을 얻고 싶다면 해당 숫자를 변수에 추가하려면 .then 블록에 해당 기능을 넣은 다음 블록 끝에 response.data를 반환해야합니다.

그런 식으로, then 블록 내에서 실행되는 함수는 동기식입니다.

당신은 $ timeout (2 초 동안 멈추고 나서 그 반환 임시 변수를 실행)으로 해킹하기를 원하지 않는 한, then 블록 외부에서 실행되는 기능에 대해서는 아무런 보장이 없다.

0

시도해보십시오.

this.getResults = function(){ 
    return $http.get(url).then(function(res){ 
     //Resquest successs 
    }, function(err){ 
     //Resquest fail 
    }); 
} 

그리고

MyFooService.getResults().then(...); 
+0

$ http를 반환하지 않는 이유는 무엇입니까? –

+0

약속을 해결하기 전에 선택적으로 응답을 처리 할 수 ​​있습니다. 출력을 정리하고 결과를 집계하는 등의 작업을 수행 할 수 있습니다. 그렇지만 $ http를 반환하는 경우에도 작동합니다. – alex030293

+0

맞습니다. $ q를 사용하지 않고도이 모든 작업을 수행 할 수 있습니다. $ http는 이미 약속을 반환합니다. –

관련 문제