Обновить
19
0
/random/+ @evil_random

Пользователь

Отправить сообщение
А для того чтобы как-то исправить ситуацию они решили просто заблокировать «серые» телевизоры :)
Вопрос был именно об этом. То что я его не совсем корректно поставил — я написал в этом комментарии.
То есть признал, что неверно сформулировал вопрос. Как Вы заметили, все комментарии сохранились.
Я даже привёл примеры как было бы написать верно, а как не верно. Это не вопрос к Senior Developer, как и многие вопросы из этого поста, но ответ на него даже Senior-разработчиком дал бы примерное понимание того, с кем мы имеем дело.

И никуда я не сливаюсь. Я просто не желаю общаться с человеком, который сходу пишет мне в хамско-высокомерном тоне, да к тому же ещё и читает выборочно только то, что ему выгодно. У Вас, к сожалению, тоже есть такая проблема.

Вас бы, кстати, я возможно и взял, ведь вы сразу попробовали воспроизвести пример, без хамства и занудства. Просто не верно меня поняли.

А по поводу придирок к словам, так можно придраться и к комментариям которые были выше «браузер не занят выполнением кода» и начать нести что-то в стиле «вообще-то браузер никакого кода и не выполняет вовсе, потому что тупо не может, его выполняет JavaScript Engine, V8 в случае Хрома и SpiderMonkey в случае Firefox», но я намеренно упростил разговор заявив «setInterval запускает код». Конечно же код запускает не он, код запускает процессор вообще.

Даже если подойти чисто формально, то setTimeout и setInterval имеют принципиальное отличие в том, что один запускает код, простите, кладёт в стек v8, ссылку на то, что вы ему там передали, один раз, а второй делает это каждые N ms.

Но я уже понял, что конструктивного диалога у нас не получится по выше озвученным причинам. Цель Джастонта не развеять мои заблуждения (хотя их и нет вовсе), а показать что в интернете кто-то не прав. Это чётко прослеживается по его ранним комментариям к другим постам. Любит человек это дело. Что поделаешь.
Это без меня, пожалуйста.

Я пожалуй воздержусь от дальнейших дискуссий с Вами. Всего хорошего.

Если вы с апломбом делаете некорректные заявления вне собеседований, то я уверен найдется у любителей вешать ярлыки и для вас ярлычок :)

А почему нельзя советовать? Не слышал ранее такого мнения. Интересна аргументация.

У вас какие-то комплексы что-ли. Где вы апломб увидели? Я написал вопрос, и потом ниже признал, что не совсем корректно поставил задачу. Почитайте внимательно.


Это отличный вопрос на самом деле. В зависимости от ответа можно многое сказать о составителе.
Вам бы я советовал поработать над Soft Skills. Пригодится и в жизни.

Не дай бог получить такого кандидата, который свои домыслы о чужих мыслях будет выдавать за факты.
Да, я писал с телефона, между матчами в Sniper Elite 4 и не совсем верно поставил вопрос. Стоило спросить именно про отличия в реализации. На собеседовании, как правило, по наводящим вопросам кандидата с этого вопроса можно выйти и на разговор про eventLoop, или на разговор про то, как написать условный ping.

Пару раз мне даже говорили, что не знают для чего нужен setInterval.
Нет. Я кинул ссылку которую не читал.
Нет никакого заблуждения. Вы не верно поняли условия задачи и выдаёте теперь свои домыслы за мои знания. Вас бы я не взял :)

Я прекрасно осознаю как работает JavaScript на низком уровне.

И если Вы посмотрите на мой пример ниже, Вы увидите что есть именно принципиальная разница в реализации условной функции ping.

Но почему-то мне чаще всего пишут верхнюю с использованием setInterval.
Конечно же я прекрасно знаю про eventLoop и про то, что конкретно делает setInterval, я там ниже написал пример кода, про который был вопрос.

Но мне почему-то на собеседованиях очень редко отвечают про eventLoop. И про то, что пишете Вы. Такому ответу я бы только обрадовался.
Вопрос был об этом:
const wrongPing = () => {
  let counter = 0; 

  const slowRequestMock = (seqId) => {
    const now = new Date();
    console.log('Ping', seqId);

    setTimeout(
      () => console.log('Pong', seqId, now - new Date()), 
      Math.floor(Math.random() * 3000) + 100,
    );
  };

  setInterval(() => slowRequestMock(counter++), 0);
}

const correctPing = () => {
  let counter = 0; 

  const slowRequestMock = (seqId, nextPing) => {
    const now = new Date();
    console.log('Ping', seqId);

    setTimeout(
      () => {
        console.log('Pong', seqId, new Date() - now);
        nextPing();
      },
      Math.floor(Math.random() * 3000) + 100
    );
  };

  const ping = () => setTimeout(() => slowRequestMock(counter++, ping), 0);
  ping();
}


Понятное дело, что если кандидат начнёт мне рассказывать про eventLoop, я буду только рад и с удовольствием выслушаю его, но чаще всего мне отвечают «ничем».
Я выше написал как это будет работать.

На вопрос вы мне не ответили, кстати.

Что будет или не будет выполняться в неактивной вкладке — это вообще дело браузера, а не кода.

stackoverflow.com/questions/5927284/how-can-i-make-setinterval-also-work-when-a-tab-is-inactive-in-chrome
У вас идеальная ситуация в вакууме. В неактивной вкладке они выполняются, но с низким приоритетом. Это означает, что тяжеловесные операции будут выполняться дольше, и могут не уложиться во время отведённое им в setInterval, и будет ещё один вызов, в то время как предыдущий ещё отрабатывает.
Зациклив setTimeout такая ситуация невозможна в принципе.
Что не верного в моей точке зрения? Что браузер может накапливать setInterval?

Скажите, в неактивной вкладке будет выполняться setInterval? А setTimeout?
Я не пойму зачем вы цепляетесь к словам.
Вы ведь прекрасно поняли о чём я говорю.
Ну вот если его убрать, у вас и получится, что реализация через setTimeout не допустит одновременного запуска двух копий кода.
У вас нет ни единого await. Зачем тут async?

И вы взяли слишком низкий уровень.
Конечно же javascript не real-time и ничего в нём не происходит гарантированно, но в условиях сферического сайта в браузере можно говорить о примерной «гарантии» того, что код будет запущен с помощью setInterval.

Вам не нравится вопрос? Почему?
Покажите, пожалуйста, мне пример, где вы немедленно после срабатывания прошлого setTimeout() вызываете следующий, да так чтобы это удовлетворяло условиям задачи.

Информация

В рейтинге
Не участвует
Откуда
Украина
Зарегистрирован
Активность