2016-10-04 5 views
-1
var myVar;  
    myModule.myFunction().then(function(data){ 
     myVar = data;  
    }); 
    console.log(myVar); 

어떤 약속을 가지고 myFunction 함수를 내 보낸 myModule 모듈이 있습니다. 이제 myVar에 데이터를 할당하고 인쇄하면 undefined이 표시됩니다. 이 결과를 얻기위한 적절한 해결책은 무엇입니까?콜백에서 데이터 반환

+0

합니다. 그런 다음 일부 데이터를 myVar에 할당하지만 그 동안에는 console.loging myVar에 할당하십시오. myVar = data 뒤에 console.log를 .then 함수에 넣음으로써 콘솔 로그가 실행되는지 확인하십시오. ** 데이터가 정의되지 않았는지 확인하십시오. ** –

+1

가능한 [ 응답 비동기 호출에서?] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

+1

@ BenFortune, 당신은 내 질문을 읽었습니까? ? 솔루션이 말하는대로 이미 완료했지만 약속이 반환 된 후 "then"블록 내에서 제어가 차단됩니다. – Krisalay

답변

1

구조를 재검토해야 할 수도 있지만, 요구 사항을 달성하기 위해서는 약속 내에서 console.log을 사용하는 것이 좋습니다.

var myVar;  
    myModule.myFunction().then(function(data){ 
     myVar = data; 
     console.log(myVar); 
    }); 
+1

해당 컨트롤 외부에서 myVar를 사용해야합니다. 이 일을 할 수있는 방법이 있습니까? – Krisalay

1

게시 한 코드가 동기가 아니므로 올바르게 작동합니다.

이것은 코드가 실제로 무엇을하는지 더 잘 이해할 수있게 해주는 코드의 흐름입니다. 아약스에서 뭔가를 반환 측면에서

// myVar is declared undefined 
var myVar; 
// you call console.log with undefined 
console.log(myVar); 
// sometime later .then is called 
myModule.myFunction().then(function(data){ 
    // later you set the global variable to the data 
    myVar = data; 
    // at this point you can log the value of myVar 
}); 

은 기적을 할 수없는 부르지 만, 당신은 반환의 사슬 다른 .then 후 수 있습니다.

myModule.myFunction().then(function(data){ 
    // do something with the data 
    return data; 
}) 
.then(function(data){ 
    // do something else with the data 
}) 

당신은 당신이 원하는만큼 then 체인 유지할 수 있으며, then 비동기이기 때문에 당신이 오류 처리에 사용할 수있는 유용한 방법, 또는 병렬로 호출 약속 또는 동 기적으로

0

가, console.log이 될 것입니다 then 전에 호출되므로 로그 시간에 undefined입니다.

이 당신 후에 당신이있어 결과를 줄 것이다 : 당신은 정의되지 않은으로 myVar에 선언하는

var myVar;  
myModule.myFunction().then(function(data){ 
    myVar = data; 
    console.log(myVar); 
}); 
+0

Downvoters, 왜 당신은이 대답과 (아마도) 다른 두 가지 대답을 downvoted? –

+1

큰 질문입니다! 셋 모두 정확합니다! 모두 뒤로 upvoting! – Tom

관련 문제