Идеальный способ связать асинхронные вызовы с помощью axios - PullRequest
1 голос
/ 14 июня 2019

Я хотел бы сделать вызов API с помощью axios на основе ответа начального вызова API - возможно ли это с асинхронными функциями?

Я пробовал что-то в следующих строках с await / обещанием:

function get_user(value){
  return axios.get( "https://apicall/" + value )
}

function get_user_posts(username){
  return axios.get("https://apicall/" + username)
}

var UsersOutput = async function () {
  const userProfile = await get_user(2928928);
  const userPosts = await get_user_posts(userProfile.data.username);
  return { userProfile, userPosts }
}

Но это, похоже, ничего не возвращает ни от одного звонка.Любые указатели оценены.

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Первые две функции возвращают приглашения, а не фактические данные.Вы должны попробовать что-то вроде этого:

async function get_user(value){
  return (await axios.get( "https://apicall/" + value )).data;
}

async function get_user_posts(username){
  return (await axios.get("https://apicall/" + username)).data;
}

Или, если вы оставите первые две функции неизменными:

var UsersOutput = async function () {
  const userProfile = (await get_user(2928928)).data;
  const userPosts = (await get_user_posts(userProfile.data.username)).data;
  return { userProfile, userPosts }
}

Лично я нахожу первый вариант лучше, потому что ваши функции получения возвращаютобъекты не являются обещаниями, поэтому вы не загромождаете свой код (await ).data;.Но это дело вкуса.

0 голосов
/ 14 июня 2019

Я думаю, вам нужно посмотреть по этой ссылке. https://javascript.info/async-await

В вашем случае вы можете использовать .then (), но я все же предпочитаю использовать async await

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...