@patsanchique

Как получить данные из асинхронной функции node js?

У меня есть запрос к стороннему апи, который получает из json данные в tradeItems
Сам запрос:
request({
    url: 'https://api.steampowered.com/IEconService/GetTradeOffers/v1/?key=MYAPIKEY&get_sent_offers=1&active_only=1&format=json',
json: true
}, (err, responser, body, undefined) => {
tradeItems = JSON.stringify(body.response['trade_offers_sent'][0].items_to_give);
});

Я пытаюсь отправить эти данные в значение offer.addTheirItems(); в эту часть кода:
client.on('webSession', function(sessionID, cookies) {
	manager.setCookies(cookies, function(err) {
		if (err) {
			console.log(err);
			process.exit(1); 
			return;
		}
		

let offer = manager.createOffer("https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=B3VcmSg1");
			offer.addTheirItems();
			offer.setMessage("");
			offer.send(function(err, status) {
				if (err) {
					console.log(err);
					return;
				}

				if (status == 'pending') {
					
					console.log(`Offer #${offer.id} sent, but requires confirmation`);
					community.acceptConfirmationForObject("identitySecret", offer.id, function(err) {
						if (err) {
							console.log(err);
						} else {
							console.log("Offer confirmed");
						}
					});
				} else {
					console.log(`Offer #${offer.id} sent successfully`);
				}
			});
		
});
});

Помогите пожалуйста с асинхронной функцией, не совсем понимаю как это реализовать
  • Вопрос задан
  • 720 просмотров
Решения вопроса 1
kiidii_aniname
@kiidii_aniname
Node.JS Developer
Смотри, твой вопрос очень не понятен, но я постараюсь ответить на то, что я понял. Смотри вот пример как работает async/await:

У тебя есть асинхронная функция
async function testName() {
    // Code
  }


Для того, чтобы выполнить в этой функции код по порядку, тебе нужно перед промисом(функция, которая даёт обещание выполнить что-то), поставить ключевое слово await.

async function testName() {
    await func1();
    await func2();
  }


Ты как-бы говоришь, что функция "testName" должна подождать пока выполнится код в функции "func1", затем в функции "func2", после этого продолжить выполнение остального кода.

И если ты хочешь получить данные из кода, который ты указал выше первым, то тебе примерно нужна такая конструкция:

async function testName() {
  const data = await request({
    url: 'https://api.steampowered.com/IEconService/GetTradeOffers/v1/?key=MYAPIKEY&get_sent_offers=1&active_only=1&format=json',
    json: true
  }, (err, responser, body, undefined) => {
    tradeItems = JSON.stringify(body.response['trade_offers_sent'][0].items_to_give);
  });
}


Теперь у вас в переменной data будет находится ответ от сервера к которому вы отправили запрос, в данном случае это торговая площадка стима. А дальше используйте data как вам нужно.

Однако ты должен понимать, что await ставится для асинхронных методов, например реквест, который ты посылаешь на торговую площадку стима - это асинхронный запрос.

Я тебе очень сильно советую посмотреть это видео
Надеюсь, что помог, я постарался максимально легко объяснить это всё.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alekciy
@alekciy
Вёбных дел мастер
Используйте промисы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы