链接javascript延迟的方法

时间:2015-06-29 15:54:39

标签: javascript angularjs

我试图让这段代码更有效率。

(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

1 个答案:

答案 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);
});

通过这种方式你可以摆脱心算,你可以设置你想要在最后一次超时后等待的时间,而不需要嵌套超时功能。