@Spawner

Как сделать возврат значения из callback?

У меня есть функция внутри функции, в которую я передаю другую функцию, это выглядит вот так:
function user_params(id, param) {
	vk('users.get', {user_ids: id, fields: param}, function(error, response){
		if (error) {
			console.log(error);
		}
		return  response[0][param];
	});
};

Мне нужно сделать так, чтобы при вызове этой функции мне возвращалось result[param].
Я уже больше часа сижу с этим, перепробовал разные способы, я уверен, что ответ на поверхности
  • Вопрос задан
  • 641 просмотр
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Функция user_params() отработает сразу и вернет null. А ответ от ВК будет получен когда-то потом и попадёт во вложенную функцию.

Как вариант, передавайте третьим параметром функцию, которую позже вызовут и в которую передадут ответ ВК:
function user_params(id, param, callback) {
  vk('users.get', {user_ids: id, fields: param}, function(error, response){
    if (error) {
      console.log(error);
    } else callback(response[0][param]);
  });
};
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
rshaibakov
@rshaibakov
Web-разработчик
Используйте промисы:
function user_params(id, param) {
 return new Promise((resolve, reject) => {
    vk('users.get', {user_ids: id, fields: param}, function(error, response){
      if (error) {
        reject(error);
      }
      resolve(response[0][param]);
    });
  });
}

user_params(123, {}).then(res => {
  // ваши действия
}).catch(error => {
 console.error(error);
});

Про async/await я думаю не буду забивать вам голову))
Ответ написан
@maxfox
Просто надо понять, что callback выполнится потом, поэтому вы и не можете вернуть значение из функции. Просто напишите внутреннюю функцию отдельно, дайте ей имя и делайте то, что вам нужно в ней. И передайте ее в vk(). Вам не нужно ничего возвращать, пишите код, который будет работать с полученным значением прямо в этой функции.
А с промисами потом разберетесь.
Ответ написан
Комментировать
Negwereth
@Negwereth
lvivcss.com.ua
Ответ - читать про асинхронность.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
30 нояб. 2022, в 15:39
500 руб./за проект
30 нояб. 2022, в 15:28
6500 руб./за проект
30 нояб. 2022, в 15:27
1000 руб./за проект