我正在使用使用Facebook API的node.js
应用程序。在我的代码的一部分中,我需要从常用函数返回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
调用是异步的,函数总是返回一个空字符串。最好的方法是什么?
答案 0 :(得分:0)
您已经在标题中回答了问题 - 使用回调。
为getAccesstoken
定义另一个变量,该变量应该是在acc_token
填充时调用的函数,并将acc_token
作为该函数的参数传递使用。
它与https.get
的工作方式相同 - 第二个参数是在请求完成时调用的函数,并传递请求的结果。
答案 1 :(得分: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)
})