@DeniSidorenko

Как использовать переменную за пределами async function?

Добрый день, подскажите пожалуйста есть такой код

const urlChannel = 'https://www.googleapis.com/youtube/v3/channels?part=snippet&id=' + channelID + '&fields=items%2Fsnippet%2Fthumbnails&key=' + apiKey;

async function getChannel(){
      const urlChannelResult = await fetch(urlChannel)
      const jsonChannel = await urlChannelResult.json()
      const authorPhoto = jsonChannel.items[0].snippet.thumbnails.high.url;
      console.log(authorPhoto)
    }
    getChannel()


Как можно использовать константу authorPhoto за пределами функции?
p.S Код что выше - находится внутри цикла map, поэтому channelID каждый раз меняется..
  • Вопрос задан
  • 153 просмотра
Решения вопроса 2
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Как можно использовать константу authorPhoto за пределами функции?

Никак. Эта константа находится в излорованой области. И доступа к ней не получить.
Но:
Вы можете возвращать это значение из функции (рекомендуемый вариант)
async function getChannel(){
  ...
  return authorPhoto
}

Или вы можете сохранять её значение в переменную в более высокой области видимости (не рекомендуется):
let tempPhoto

async function getChannel(){
  ...
  tempPhoto = authorPhoto 
}
Ответ написан
В основной поток асинхронная функция возвращает Promise. Ты не можешь в основном потоке подождать выполнения асинхроного кода, поэтому глобальная переменная - не вариант, она будет пустой до тех пор пока не выполнится асинхонный код. В основном потоке ты можешь обрабатывать результаты асинхронных функций учитывая что это Promise
https://developer.mozilla.org/en-US/docs/Web/JavaS...

Из твоей задачи не ясно в каком месте ты собираешся использовать эту переменную, так что однозначного ответа на твой вопрос - нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@dGololobov
начинающий
async function getChannel(urlChannel){
      const urlChannelResult = await fetch(urlChannel)
      const jsonChannel = await urlChannelResult.json()
      const authorPhoto = jsonChannel.items[0].snippet.thumbnails.high.url
      console.log(authorPhoto
     return authorPhoto
    }
[...].map(async el => {
     const authorPhoto = await getChannel(el.url)
     // ....
})
Ответ написан
@zkrvndm
Боты, парсеры, расширения
Используйте вместо константы обычную переменную. Конечно, нужно будет потом быть внимательным, чтобы случайно не перезаписать полученную глобальную переменную, но как по мне, это не проблема.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
21 окт. 2020, в 22:40
300 руб./за проект
21 окт. 2020, в 22:34
25000 руб./за проект
21 окт. 2020, в 21:24
7000 руб./за проект