0

node.jsFacebookAPIを使用するアプリケーションを使用しています。access_tokenコードの一部で、共通の関数からを返す必要があります。つまり、Facebookアクセストークンを取得するには、他の多くの関数がこの関数を呼び出す必要があります。

以下は私のコードです:

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()
}

呼び出しは非同期であるためhttps.get、関数は常に空の文字列を返します。これを行うための最良の方法は何ですか?

4

2 に答える 2

0

タイトルの質問には既に回答しています - コールバックを使用してください。

が満たさgetAccesstokenれたときに呼び出される関数である別の変数を定義し、その関数が使用する引数として渡します。acc_tokenacc_token

2 番目のhttps.get引数は、リクエストが完了したときに呼び出される関数であり、リクエストの結果が渡されます。

于 2012-09-16T11:58:28.417 に答える
0

getAccesToken 関数にコールバック関数を提供し、応答が終了した後に関数を呼び出し、その関数に acc_token を渡します。

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

次に、次のように関数を呼び出します

getAccesToken("whatever",function(err,token){
  console.log("got token", token)
})
于 2012-09-16T12:01:54.710 に答える