2016-01-21 6 views
0

У меня есть ситуация, когда я жду, что произойдет несколько событий. я вижу много хороших примеров использования setTimeout с использованием именованной функции, но есть ли способ использовать какой-то анонимный метод для тайм-аута?анонимный setTimeout функция

код в настоящее время выглядит следующим образом:

testForObject(); 

function testForObject() { 
    if (typeof marksObjectName === 'object') { 
      // blah blah 
    } else { 
     console.log('marksObjectName does not exist quite yet'); 
     setTimeout(function() { testForObject() }, 500); 
    } 
} 

так мне было интересно, если есть какой-то способ именования функции при SetTimeout и использовать анонимный метод вместо этого, возможно, что-то вроде этого:

setTimeout(function() { 
    if (typeof marksObjectName === 'object') { 
      // blah blah 
    } else { 
     console.log('marksObjectName does not exist quite yet'); 
    } 
}, 500); 

Очевидно, это не работает, но это была моя первая (и только) догадка.

спасибо, что вы все очень.

+0

вы рассмотрели с помощью обещаний вместо времени ожидания? – Jason

ответ

1

Вы можете назвать функцию следующим образом. Обратите внимание, что вам нужно будет поместить его в другой тайм-аут в пункте else:

setTimeout(function timer() { 
 
    if (typeof marksObjectName === 'object') { 
 
    // blah blah 
 
    } else { 
 
    console.log('marksObjectName does not exist quite yet'); 
 
    setTimeout(timer, 500); 
 
    } 
 
}, 500);

+1

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

+0

Я выбрал этот ответ. я смог использовать ваше решение и вставлять другой setTimeout с помощью вашей модели. Благодарю. – edwardsmarkf

0

Я считаю, что шляпа setInterval - это то, что вы ищете.

setInterval(function() { if (typeof marksObjectName === 'object') { // blah blah } else { console.log('marksObjectName does not exist quite yet'); } }, 500);

+1

Вы хотите сохранить ссылку на интервал, чтобы вы могли использовать clearInterval (интервал), когда код готов прекратить поиск. – tanenbring

1

Вы можете назвать переданную функцию, как

setTimeout(function myFunction() { 
    // ... 
}, 500); 
+0

Я надеялся избежать использования каких-либо имен функций вообще, чтобы сохранить анонимность. – edwardsmarkf

+0

Существует устаревший аргумент.callee, который укажет на анонимную функцию – Leonardo

Смежные вопросы