我试图让这段代码更有效率。
(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并不完全熟悉(实际上根本不熟悉)。我正在尝试创建一个与Angular交互的客户端脚本。这里有5个声明,我试图将其压缩成尽可能少的代码。在第一个setTimeout
被触发3000毫秒之前,我需要运行:sc = angular.element('tbody').scope(); sc.draft.resetRoster(); sc.$apply();
在3,000毫秒后,第一个setTimeout
运行。大约6,000毫秒(假设第一个setTimeout
和第二个setTimeout
之间差距大约为3,000毫秒)我需要执行第二个setTimeout
。
有没有更好的方法来组合这个功能?更少的代码?更好地排序我一般如何处理setTimeout
?
答案 0 :(得分: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);
});
通过这种方式你可以摆脱心算,你可以设置你想要在最后一次超时后等待的时间,而不需要嵌套超时功能。