Я пытаюсь сделать этот кусок кода более эффективным.
(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
в целом?
Вместо setTimeout
используйте угловое обслуживание $timeout
которое работает аналогично, но возвращает promise
которое будет разрешено по истечении указанного времени, а также вызовет $apply
. Итак, в вашем случае:
$timeout(function () { ... }, 3000).then(function () {
//after the first timeout we set another one and return its promise
$timeout(function () { ... }, 3000);
});
Таким образом, вы избавляетесь от умственной арифметики, и вы можете просто установить время, которое вы хотите подождать после истечения последнего таймаута, без функций таймаута вложенности.