如何添加动态承诺或延迟当前的承诺?

时间:2013-08-09 14:42:22

标签: javascript angularjs

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

想象一下超时将'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我无法理解这段代码,它的行为方式完全符合我的需要。但它是为其他东西而制造的。

1 个答案:

答案 0 :(得分: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是您希望在延迟时发生的功能。这也使您可以根据需要更改延迟值。

干杯。