Как зациклить эту функцию после последнего значения

1
var board = new DepartureBoard(document.getElementById('test'), {
     rowCount: 1,
     letterCount: 13
 });

window.setTimeout(function() {
    board.setValue(['VISA SERVICES', ]);
}, 0)
window.setTimeout(function() {
    board.setValue(['POE CLEARENCE', ]);
}, 8000);
window.setTimeout(function() {
    board.setValue(['STAMPING', ]);
}, 16000);
window.setTimeout(function() {
    board.setValue(['ATTESTATION', ]);
}, 24000);
window.setTimeout(function() {
    board.setValue(['INSURANCE', ]);
}, 32000);
window.setTimeout(function() {
    board.setValue(['FOREX', ]);
}, 40000);

https://codepen.io/Mtn_Wolf/pen/LKsvz

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

  • 0
    Вы хотите сказать, что хотите, чтобы весь процесс запускался снова, снова и снова?
  • 0
    Да, я хочу, чтобы весь процесс запускался снова, снова и снова без каких-либо задержек
Показать ещё 3 комментария
Теги:

3 ответа

0
Лучший ответ

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

function startInterval() {
    window.setTimeout(function() { board.setValue(['VISA SERVICES']); }, 0)
    window.setTimeout(function() { board.setValue(['POE CLEARENCE' ]); }, 8000);
    window.setTimeout(function() { board.setValue(['STAMPING']); }, 16000);
    window.setTimeout(function() { board.setValue(['ATTESTATION']); }, 24000);
    window.setTimeout(function() { board.setValue(['INSURANCE']); }, 32000);
    window.setTimeout(function() { board.setValue(['FOREX']); }, 40000);
}

startInterval();
setInterval(startInterval, 48000); // use the length of the period
  • 0
    Спасибо, что работаете
1

Использование прямых тайм-аутов в современном ECMAScript не является хорошим шаблоном, а не только потому, что "современный подход", а потому, что улучшенная цепочка и обработка ошибок

function delay(time) { return new Promise(resolve => setTimeout(resolve, time) }
function worker() {
    return Promise.resolve()
        .then(() => board.setValue(['VISA SERVICES']))
        .then(() => delay(1000))
       // and so on
        .then(worker);
}

worker().catch((error) => {
    // Error handling here
})
0

Есть много способов, которыми вы могли бы это сделать, здесь мое предложение, которое в основном сохраняет ваш текущий код неповрежденным -

Поместите все ваши вызовы в window.setTimeout() в функции - в конце добавьте еще один вызов window.setTimeout() который просто вызывает функцию, которая запустит ее снова. Что-то вроде...

var board = new DepartureBoard(document.getElementById('test'), { rowCount: 1, letterCount: 13 });

var myFunction = function(){
    window.setTimeout(function() {
        board.setValue(['VISA SERVICES', ]);
    }, 0)
    window.setTimeout(function() {
        board.setValue(['POE CLEARENCE', ]);
    }, 8000);
    window.setTimeout(function() {
        board.setValue(['STAMPING', ]);
    }, 16000);
    window.setTimeout(function() {
        board.setValue(['ATTESTATION', ]);
    }, 24000);
    window.setTimeout(function() {
        board.setValue(['INSURANCE', ]);
    }, 32000);
    window.setTimeout(function() {
        board.setValue(['FOREX', ]);
    }, 40000);
    window.setTimeout(function() {
        myFunction(); // call it again here, and the process will start over
    }, 50000);
}

myFunction(); // don't forget - now that all of the window.setTimeout calls are wrapped in a function, the process won't start unless you call the function here, setting off the loop
  • 0
    Произошла ошибка, поэтому я заменил функцию "myFunction () {" to "myFunction () {" теперь работает. Спасибо.
  • 0
    О да - извините, это опечатка с моей стороны. Я хотел написать var myFunction = function(){...} ... edit ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню