2015-07-18 3 views
1

Я пытаюсь получить тег google gpt, чтобы обновлять максимальное количество раз, если при загрузке он возвращается пустым.Как сделать этот javascript async во время работы цикла?

<script type="text/javascript"> 
    googletag.cmd.push(function() { 
    var slot1 = googletag.defineSlot("/gtpConfigStuff",[300,600],"gtpConfigStuff") 
    .addService(googletag.pubads()) 
    .setTargeting("pos", "BTF") 
    .setTargeting("URL", encodeURIComponent(window.location)); 
    googletag.enableServices(); 
    googletag.display("gtpConfigStuff"); 
    googletag.pubads().addEventListener('slotRenderEnded', function(event) { 
    var tries = 0; 
    while (tries<=2 && event.isEmpty==true) { 
    //googletag.pubads().refresh([slot1]); 
    //setTimeout(function() { 
     tries++; 
     console.log(tries); 
     //}, 1000); 
     } 
     console.log("done"); 
    }); 
    }); 
</script> 

С вышеуказанными строками, прокомментированными, он работает так, как должен. С вызовом функции обновления он будет работать бесконечно. SetTimeout, который, как я думал, может позволить завершить обновление.

Спасибо.

+0

Если я правильно понять, добавив #setTimeout нарушает функциональность. Причина в том, что #setTimeout не работает, как вы думаете, - это * не * пауза. Вместо этого подумайте, как начать новый поток. См. Цикл и стек событий JS. –

+0

oh ok. Тогда это не поможет. Если я удалю этот бит, он просто петли навсегда. – user1222303

+0

t, вероятно, будет загружаться бесконечно, потому что googletag.pubads(). Refresh ([slot1]); вызывает событие slotRenderEnded, которое обновляет googletag.pubads, который вызывает событие slotRenderEnded, которое вызывает событие googletag.pubads, которое вызывает событие slotRenderEnded, которое обновляет googletag.pubads, который вызывает событие slotRenderEnded, которое обновляет googletag.pubads, который вызывает событие slotRenderEnded, которое обновляет googletag.pubads, который вызывает событие slotRenderEnded, где я собираюсь? – Jan

ответ

0

Ваш скрипт будет загружаться на неопределенное время, потому что вы переустановке tries переменную на неопределенный срок

var tries = 0; // Set your variable here... 
googletag.pubads().addEventListener('slotRenderEnded', function(event) { 
    // ...and not here. Otherwise it will always reset to 0 when the event triggers. 
    // "tries" will still be available in here though as a closure so you can still use it 
    if (tries<=2 && event.isEmpty==true) { 
    googletag.pubads().refresh([slot1]); 
    tries++; 
    } 
});