0

я пытаюсь сделать объект конструктор FriendsGet который будет отдавать список друзей, но у меня не получается приравнять переменную obj.response к this.friends. Я думаю что проблема в области видимости, но очень плохо понимаю эту тему, не могли бы вы помочь мне?

const https = require('https');

let access_token = process.argv[2],
    id = process.argv[3];


function FriendsGet(id) {
    let body = '',
    options = {
    host: 'https://api.vk.com',
    path: '/method/friends.get?user_id=' + id + '&order=name&fields=domain&access_token=' + access_token +'&v=5.85'
    },
    url = options.host + options.path;

    https.get(url, function(res){
        res.on('data', function(elem) {
            body += elem;
        })
        res.on('end', function(){
            obj = JSON.parse(body);
            this.friends = obj.response;//Не работает
            console.log(obj.response); //Список
        })
    });
    this.id = id; //Работает
}

let user = new FriendsGet(id);
console.log(user.friends); //undefined

1 Answers1

1
function Friends() {
    let host = 'https://api.vk.com';

    this.get = function (id, callback) {
        let url = `${host}/method/friends.get?user_id=${id}&order=name&fields=domain&access_token=${access_token}&v=5.85`;
        https.get(url, function(res){
            res.on('data', function(elem) {
                let obj = JSON.parse(elem); //парсим ответ

                callback(obj.response); // вызываем callback
            });

        });
    };
}

var friend = new Friends();
friend.get(1, function (friends) {
    console.log(friends); //Список
});

Попробуйте так.

создаем класс Friends, добавляем в него публичный метод this.get с двумя параметрами id и callback. в методе get мы выполняем запрос в API VK. После получения данных вызываем функцию callback, и передаем в него ответ от API