在 javascript 中链接具有延迟的方法

Chaining methods with delays in javascript

本文关键字:延迟 方法 javascript 链接      更新时间:2023-09-26

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

(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 个语句,我试图将其压缩为尽可能少的代码。在 3,000 毫秒后触发第一个setTimeout之前,我需要运行以下命令:sc = angular.element('tbody').scope(); sc.draft.resetRoster(); sc.$apply();

3,000 毫秒后,第一个setTimeout运行。大约 6,000 毫秒(假设第一个setTimeout和第二个setTimeout之间大约有 ~3,000 毫秒的差距(我需要执行第二个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);
});

通过这种方式,您可以摆脱心算,只需设置上次超时后要等待的时间,而无需嵌套超时函数。