При первой загрузке страницы с вашей игрой происходит ряд асинхронных событий.
 Загружается игровая логика, загружается тег рекламы, начинается инициализация API размещения рекламы, и реклама может быть предварительно загружена. В результате, если вы вызываете adBreak() вскоре после загрузки страницы, существует вероятность, что API не инициализировался или предварительная загрузка рекламы не была завершена. Если API не инициализировался, вызов завершится ошибкой, а если вы зарегистрировали обратный вызов adBreakDone() , breakStatus будет установлен в notReady .
 Если вам необходимо синхронизировать логику игры с инициализацией API размещения рекламы, вы можете использовать обратный вызов onReady() для adConfig() .
 onReady() вызывается API размещения рекламы, когда:
- тег объявления загружен,
 - API размещения рекламы загрузился и инициализировался, и
 -  Предварительная загрузка рекламы завершена — если вы запросили предварительную загрузку с помощью 
adConfig() 
 На этом этапе API размещения рекламы полностью инициализирован. Вы можете вызвать adBreak() , и он не вернёт статус notReady . Но, как всегда adBreak() может всё равно не показать рекламу (например, если объявление не было доступно).
 Вот пример, демонстрирующий использование onReady() :
...
<script>
    window.adsbygoogle = window.adsbygoogle || [];
    var adBreak = adConfig = function(o) {adsbygoogle.push(o);}
    ...
    function init() {
      // Game start logic, show loading screen
      adConfig({
        preloadAdBreaks: 'on',
        onReady: showAd
      });
      // Don't start the gameplay just yet, keep loading.
    }
    function showAd() {
      // Show an ad
      adBreak({
        type: 'start',
        adBreakDone: startGame,  // always called, unblocks the game logic
        ...
      });
    }
    ...
</script>
 Примечание : наиболее распространённый вариант вызова adBreak() вскоре после загрузки страницы — это реализация преролла. Мы настоятельно рекомендуем использовать готовый тип размещения preroll , а не пытаться создать свой собственный, используя описанные здесь методы.
 preroll автоматически реализует всю необходимую логику предварительной загрузки и тайм-аута. Если вы используете preroll в своей игре, вам не нужно использовать onReady() . Подробнее о preroll
Тайм-ауты
 Вызов onReady() не гарантируется, если инициализация API размещения рекламы задерживается или не загружается полностью. Чтобы обеспечить своевременный запуск игры, можно настроить тайм-аут. Если вы получили обратный вызов onReady() , вы можете вызвать adBreak() для размещения рекламы. В противном случае вы можете пропустить вызов ad и продолжить загрузку игры.
Следующий пример включает тайм-аут и аналогичен логике, реализованной при размещении преролла:
...
<script>
    window.adsbygoogle = window.adsbygoogle || [];
    var adBreak = adConfig = function(o) {adsbygoogle.push(o);}
    ...
    function init() {
        // Game start logic
        let adConfigPromise =
            new Promise((resolve, reject) => adConfig({
                preloadAdBreaks: 'on',
                onReady: () => resolve(true)
            }));
        let timeoutPromise =
            new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(false);
                }, 2000);
            });
        // Whatever happens first resolves this promise.
        Promise.race([
            adConfigPromise,
            timeoutPromise
        ]).then((shouldShowPreRoll) => {
            if (shouldShowPreRoll) {
                showPreRoll();
            } else {
                startGame();
            }
        });
    }
    function showPreRoll() {
      // Show ad
      adBreak({
          type: 'start',
          adBreakDone: startGame, // always called, unblocks the game logic
          ...
      });
    }
    ...
</script>