3

我的主要目标是在计数器触发之前延迟它。

想象一下超时将“n”减为“0”,然后触发一个事件,但每次发生某些事情时,它都可以异步重置为“n”。

我尝试使用带有 $q 的“promises”来实现这一点。

我试图在链接一个全新的延迟中添加带有超时的动态新承诺。

但在实现这个目标之前,我什至无法链接新的承诺。

例子:

var d1 = $q.defer();
var d2 = $q.defer();

d1.promise.then(function(data) {
    return 'd1' + data;
});

d2.promise.then(function(data) {
    return 'd2' + data;                 
});

var t = $q.all([d1.promise]);

t.then(function(data) {
    console.log(data);
});

$timeout(function()
{
    d1.resolve("1000");
}, 1000);

$timeout(function()
{
    t.then(function() { 
        d2.resolve("800");
    });
}, 800);

它只输出: ["1000"] 而不是 ["1000", "800"]

到目前为止我的搜索:

stackoverflow没有帮助我。

angular-promise-tracker我无法理解这段代码,它的行为方式正是我所需要的。但它是为别的东西而制作的。

4

1 回答 1

1

如果您愿意只使用本机 javascript,那么这应该可以:

// create a handle to the timeout
var toHandle = window.setTimeout(X);

// put this in the event that causes a reset
window.clearTimeout(toHandle);
toHandle = window.setTimeout(X);

其中 X 是您希望延迟发生的功能。这也使您能够根据需要更改延迟值。

干杯。

于 2013-08-09T15:57:11.310 回答