Если для apiIsReady
не установлено значение true, вы создаете цикл, который добавляет новое значение в массив с каждой итерацией этого же массива.
function load_all_waitting_inits()
{
for(var opts of waitting_inits) // new values are being added with each iteration, preventing loop to end
{
init(opts); // parse value of waitting_inits array
}
}
function init(opts) {
loadPlayer();
if (apiIsReady) { // always false
addVideo(opts.video, opts.playerVars || {});
}
else
{
waitting_inits.push(opts) // here you are adding values infinitely
}
}
Редактировать
Проверить, содержит ли массив объект.
function init(opts) {
loadPlayer();
if (apiIsReady) {
addVideo(opts.video, opts.playerVars || {});
}
else if(!waitting_inits.includes(opts)) // if array doesn't include opts then push
{
waitting_inits.push(opts)
}
}