javascript vk api

396
24 февраля 2017, 02:43

Есть код:

function ferd() {
   var terin;
   VK.Api.call('users.get', {user_ids: 210700286, fields: 'bdate'}, function(r) {
        if(r.response) {
           terin = r.response[0].bdate;
           alert(r.response[0].bdate);
        }
   }); 
   console.log(terin);
}

Появляется ошибка

TypeError: 'terin' of undefined

Как присвоить terin значение из VK.API

Так же при работе с массивом.

var terin = [];
function ferd() {
VK.Api.call('friends.get', {
 user_ids: id_vk, fields: 'uid,first_name'
}, function(data) {
    if (data.error) {
        console.log(data.error.error_msg);
    } else {
        if (data.response.length > 0) {
            for (i = 0; i < data.response.length; i++) {
               terin.push(data.response[i].user_id);
            }
        }
    }
});
}
Answer 1

переменная terin будет присвоена только в callback функции.

Один из вариантов использовать Promise для работы с асинхронными данными.

function ferd() {
    var terin = [],
        terinPr = new Promise(function(resolve, reject) {
        VK.Api.call('users.get', {user_ids: 210700286, fields: 'bdate'}, function(r) {
              if(r.response) {
              terin = r.response[0].bdat;
              alert(r.response[0].bdate);
              resolve(r);
          }
      }); 
    });
    terinPr.then(function (result) {
        console.log(result);
    })
}

Обновлено. Тестовый код с обещаниями:

function ferd() {
var terin = [],
    terinPr = new Promise(function(resolve, reject) {
    VK.Api.call('users.get', {user_ids: 210700286, fields: 'bdate'}, function(r) {
        if (data.error) {
            reject(data.error.error_msg);
        } else {
            resolve(data.response);
        }
  }); 
});
terinPr.then(function (response) {
   if (response.length > 0) {
            for (i = 0; i < response.length; i++) {
                terin.push(response[i].user_id);
            }
        }
});
}

Обновлено 23.02.17. вариант а калбэк функциями JQUERY:

    var terin = [];
var callbacks = $.Callbacks();
callbacks.add( setTerin );
setTerin (response){
    for (i = 0; i < response.length; i++) {
        terin.push(response[i].user_id);
    }
    console.log(terin);
}
function ferd() {
        VK.Api.call('users.get', {user_ids: 210700286, fields: 'bdate'}, function(r) {
              if(r.response) {
              callbacks.fire( r.response );
           }
       }); 
}
READ ALSO
активна категорія товару [требует правки]

активна категорія товару [требует правки]

як зробити активною категорію коли ми зайшли в товар даної категорії

235
Группировка значений в массив по ключам javascript

Группировка значений в массив по ключам javascript

Есть массив: [{ continent: 'Europa', country: 'Russia', region: 'Moskovska obl' }, { continent: 'Europa', country: 'Russia', region: 'Tumenskaya obl' }, { continent: 'North America', country: 'USA', region:...

277
BD Chrome Extensions

BD Chrome Extensions

Какую базу данных лучше всего использовать для chrome extensions и возможно ли вообще это? Я хочу сделать базу данных слов и выбирать потом их по части...

235
ajax поиск по xml файлу

ajax поиск по xml файлу

ЗдравствуйтеУ меня следующая задача

217