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

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

11
Подписчики
Отправить сообщение
Вопрос был именно об этом. То что я его не совсем корректно поставил — я написал в этом комментарии.
То есть признал, что неверно сформулировал вопрос. Как Вы заметили, все комментарии сохранились.
Я даже привёл примеры как было бы написать верно, а как не верно. Это не вопрос к 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() вызываете следующий, да так чтобы это удовлетворяло условиям задачи.
Конечно. Выше написал. Но так ведь не интересно, не правда ли?

Информация

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