Может кто-нибудь объяснить, почему мне нужно использовать await в 2 разных функциях для получения json? - PullRequest
1 голос
/ 18 апреля 2020

Пример:

    async function getInitialVideos(){
         const ans= await fetch(`https://www.googleapis.com/youtube/v3/search?part=snippet&videoEmbeddable=true&type=video&key=${APIKEY}&q=${'The Beatles'}`).then(res=>res.json())

    }

    async function onInit() {
        await getInitialVideos()
          DoSomething()
}

В этой функции я говорю, что дождитесь обещания разрешить и принесите мне, что json, зачем мне ждать во второй функции?

Я имею в виду, если я уроню его, вторая функция начнет выполняться до того, как я получу значения из первой. Допустим, я хочу, чтобы эта функция выборки была константой, которая всегда получает это значение, как бы я ее реализовал и убедился, что она ждет, не ожидая снова в другой функции?

1 Ответ

2 голосов
/ 18 апреля 2020

await не делает асинхронный код синхронным. Это просто создает иллюзию, что она находится внутри функции, помеченной как async.

Когда двигатель JS достигает await, она переводит функцию в спящий режим до тех пор, пока обещание, которое вы ждете, не разрешится.

Если вы await getInitialVideos, то onInit будет go спать, пока обещание, возвращаемое getInitialVideos, не разрешится (в этот момент оно проснется и продолжит с DoSomething).

Если вы не await getInitialVideos, то когда getInitialVideos перейдет в спящий режим (поскольку он await ing fetch().then()) onInit продолжится с DoSomething. Затем в какой-то момент в будущем fetch().then() разрешится и getInitialVideos проснется и продолжит.

...