Как установить Timeout во время цикла? - PullRequest
0 голосов
/ 25 декабря 2018

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

У меня проблемы с параллельной природой Javascript.Независимо от того, как я пытаюсь, я не могу заставить свой цикл приостановить выполнение после каждого слова.

Моя последняя попытка выглядит так:

  var shuffleSentences;

  $(function() {
    return shuffleSentences();
  });

  shuffleSentences = function() {
    var div, index, sentence, sentences;
    div = $(".sentences");
    sentences = div.data("sentences").split(";");
    sentence = div.html();
    index = sentences.indexOf(sentence);
    sentences.splice(index, 1);
    return $.each(sentences, function(i, sentence) {
      return setTimeout((function() {
        return div.fadeTo(500, 0.0, function() {
          div.html(sentence);
          return div.fadeTo(1000, 1.0, function() {
            if (sentences.length === i + 1) {
              console.log("Restart: " + i);
              return shuffleSentences();
            } else {
              return console.log("Don't restart: " + i);
            }
          });
        });
      }), 4000);
    });
  };
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>We're at number <span class="sentences" data-sentences="one;two;three;four">two</span></p>

Как видите, замены слов действительно случаются, но, глядя в консоль, кажется, что я делаю это неправильно.

Предложения приветствуются!

...