Методы цепочки с задержками в JavaScript

0

Я пытаюсь сделать этот кусок кода более эффективным.

(function() { 
    sc = angular.element('tbody').scope(); sc.draft.resetRoster(); sc.$apply(); 
    setTimeout(function() {
        sc.draft.rosterAdd({id: "12921", salary: 10600, position: "P"});sc.draft.rosterAdd({id: "12123", salary: 2900, position: "C"});sc.draft.rosterAdd({id: "5435", salary: 3800, position: "1B"});sc.draft.rosterAdd({id: "12562", salary: 2400, position: "2B"});sc.draft.rosterAdd({id: "38321", salary: 3100, position: "3B"});sc.draft.rosterAdd({id: "6319", salary: 2400, position: "SS"});sc.draft.rosterAdd({id: "5204", salary: 3200, position: "OF"});sc.draft.rosterAdd({id: "5222", salary: 2500, position: "OF"});sc.draft.rosterAdd({id: "12462", salary: 2600, position: "OF"});
    }, 3000);
    setTimeout(function() {
        document.querySelector('#enterButton').click();
    }, 6000);
})();

Я не совсем знаком с Угловым (на самом деле совсем нет). Я пытаюсь создать клиентский скрипт, который взаимодействует с Angular. Там 5 общих заявлений здесь, что я пытаюсь сконденсироваться в как можно меньше кода. Прежде чем первый setTimeout будет запущен в 3000 мс, мне нужно это запустить: sc = angular.element('tbody').scope(); sc.draft.resetRoster(); sc.$apply(); sc = angular.element('tbody').scope(); sc.draft.resetRoster(); sc.$apply();

Через 3000 мс запускается первый setTimeout. Примерно 6 000 мс (предполагая, что между первым значением setTimeout и вторым setTimeout существует разрыв около 3000 мкс), мне нужно выполнить второй setTimeout.

Есть ли лучший способ собрать эту функцию? Меньше кода? Лучше упорядочивание того, как я обрабатываю setTimeout в целом?

Теги:

1 ответ

0

Вместо setTimeout используйте угловое обслуживание $timeout которое работает аналогично, но возвращает promise которое будет разрешено по истечении указанного времени, а также вызовет $apply. Итак, в вашем случае:

$timeout(function () { ... }, 3000).then(function () {
    //after the first timeout we set another one and return its promise
    $timeout(function () { ... }, 3000);
});

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

  • 0
    мы ставим еще один и возвращаем его обещание - вы его не возвращаете.

Ещё вопросы

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