我在尝试执行此代码时不断获得TypeError: Cannot read property 'first_name' of undefined
(所有变量,包括模块在代码的其他部分中定义):
if (messageText) {
var senderID_first_name = f_User.UserQ(senderID);
sendTextMessage(senderID, String(senderID_first_name));
}
f_User = {
UserQ: function(id) {
var parse_body;
request.get('https://graph.facebook.com/v2.6/'+id+'?fields=first_name,last_name,profile_pic,locale,timezone,gender&access_token='+PAGE_ACCESS_TOKEN, function(error, response, body) {
if (!error && response.statusCode == 200) {
parse_body = body;
}
});
return parse_body.first_name;
}
}
答案 0 :(得分:1)
您遇到了JS的异步行为的典型问题。您还没有返回日期。您想要的数据位于get
方法的回调中。
你可以在你的架构中解决这个问题。
UserQ: function(id, callback) {
var parse_body;
request.get('https://graph.facebook.com/v2.6/'+id+'?fields=first_name,last_name,profile_pic,locale,timezone,gender&access_token='+PAGE_ACCESS_TOKEN, function(error, response, body) {
if (!error && response.statusCode == 200) {
callback(parse_body.first_name);
}
});
}
然后
...
UserQ(2, function(name){
console.log('Name for id 2', name);
});
...
您必须在JS中学习callbacks and promises。祝你好运: - )
答案 1 :(得分:0)
我希望这对你有用,而不是在我身上进行测试。
if (messageText) {
f_User.UserQ(senderID,true);
}
f_User = {
UserQ: function(id,sendMessage=false) {
request.get('https://graph.facebook.com/v2.6/'+id+'?fields=first_name,last_name,profile_pic,locale,timezone,gender&access_token='+PAGE_ACCESS_TOKEN, function(error, response, body) {
if (!error && response.statusCode == 200) {
if(sendMessage)
sendTextMessage(id, String(body.first_name));
}
});
}
}