TypeError:无法读取属性' first_name'未定义的

时间:2017-01-14 09:35:36

标签: javascript

我在尝试执行此代码时不断获得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;
    }
}

2 个答案:

答案 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。祝你好运: - )

P.S:见这个例子:http://jsbin.com/jagisumode/edit?js,console

答案 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));
             }
        });
    }
}