2012-09-16 4 views
0

Facebook API를 사용하는 node.js 응용 프로그램을 사용하고 있습니다. 내 코드의 한 부분에서 공통 함수에서 access_token을 반환해야합니다. 즉, 다른 많은 함수는 Facebook 액세스 토큰을 검색하기 위해이 함수를 호출해야합니다. https.get 호출이 비동기콜백 함수 및 비동기 요청 사용

function getAccesstoken(code) { 
    var options = { 
     host: 'graph.facebook.com',   
     path: '/oauth/access_token?client_id=xxxx&redirect_uri=xxxxxx&client_secret=xxxxx&code='+code.toString() 
    }; 

    var acc_token = '' 

    https.get(options, function(resp) { 
     resp.on('data', function(d) {          
      acc_token = acc_token+d.toString() 
     });  

     resp.on('end', function() { 
      var expiry_index = acc_token.indexOf('&expires=') 

      acc_token = acc_token.substring(0, expiry_index)    
     }); 
    });   

    return acc_token.toString() 
} 

때문에, 함수는 항상 빈 문자열을 반환

다음은 내 코드입니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

+0

당신처럼

function getAccessToken(code,cb){ ..... resp.on('end',function(){ ..... cb(null,acc_token) }) } 

다음 함수를 호출 ... 당신의 getAccesToken 함수에 콜백 함수를 제공하고 응답이 종료 된 후 함수를 호출하고 그 함수에 acc_token 통과 시스템의 다른 부분이'access_token'을 요청할 것이고 당신이 그것을 가지지 않을 것이라는 것을 염려하거나 당신이 익숙하지 않은 것을 모델링 할 필요가 있다는 것을 깨닫는 방법을 모른다 (이벤트 중심 프로그래밍)? –

답변

0

getAccesToken("whatever",function(err,token){ 
    console.log("got token", token) 
}) 
+0

고맙습니다 초신성, 그것은 콜백의 힘을 배울 시간이야 :) – Vivek

0

귀하는 이미 제목에 질문에 답변했습니다. 콜백을 사용하십시오.

acc_token이 채워질 때 호출되는 함수 여야하는 getAccesstoken에 대한 다른 변수를 정의하고 해당 함수의 인수로 acc_token을 인수로 전달하십시오.

https.get이 작동하는 것과 같습니다. 두 번째 인수는 요청이 완료되면 호출되며 요청의 결과가 전달되는 함수입니다.