gpt4 book ai didi

javascript - 在这个用例中 $interval 和 $timeout 之间有真正的区别吗?

转载 作者:行者123 更新时间:2023-11-28 01:04:36 25 4
gpt4 key购买 nike

两者之间有真正的区别吗:

$interval(function () {
doSomething();
}, 250, 1, true);

$timeout(function () {
doSomething();
}, 250);
  • 两项返回 promise
  • 两者都执行 doSomething() 一次。
  • 两者都会触发消化周期。

我注意到的唯一可能的区别是,如果我使用 false 作为 $interval 的最后一个参数,我可以绕过摘要循环。

最佳答案

让我们进行一些代码分析

超时

function timeout(fn, delay, invokeApply) {
var deferred = $q.defer(),
promise = deferred.promise,
skipApply = (isDefined(invokeApply) && !invokeApply),
timeoutId;

timeoutId = $browser.defer(function() {
try {
deferred.resolve(fn());
} catch(e) {
deferred.reject(e);
$exceptionHandler(e);
}
finally {
delete deferreds[promise.$$timeoutId];
}

if (!skipApply) $rootScope.$apply();
}, delay);

promise.$$timeoutId = timeoutId;
deferreds[timeoutId] = deferred;

return promise;
}

间隔

function interval(fn, delay, count, invokeApply) {
var setInterval = $window.setInterval,
clearInterval = $window.clearInterval,
deferred = $q.defer(),
promise = deferred.promise,
iteration = 0,
skipApply = (isDefined(invokeApply) && !invokeApply);

count = isDefined(count) ? count : 0;

promise.then(null, null, fn);

promise.$$intervalId = setInterval(function tick() {
deferred.notify(iteration++);

if (count > 0 && iteration >= count) {
deferred.resolve(iteration);
clearInterval(promise.$$intervalId);
delete intervals[promise.$$intervalId];
}

if (!skipApply) $rootScope.$apply();

}, delay);

intervals[promise.$$intervalId] = deferred;

return promise;
}

最后一个区别并不正确,因为这两种方法都实现了 if (!skipApply) $rootScope.$apply(); 没有区别

关于javascript - 在这个用例中 $interval 和 $timeout 之间有真正的区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25231513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com