2013-08-09 2 views
4

Моя основная цель - отложить счетчик до его запуска.Как добавить динамические обещания или задержать текущий?

Представьте, что тайм-аут отключает 'n' до '0', а затем запускает событие, но его можно сбрасывать асинхронно до 'n' каждый раз, когда что-то происходит.

Я попытался достичь этого, используя «обещания» с помощью $ q.

Я пытался добавить динамически новые обещания с тайм-аутом внутри цепочки новой задержки.

Но прежде чем достичь этой цели, я не мог даже переложить новые обещания.

Пример:

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 Я не могу понять этот код, как он ведет себя именно для того, что мне нужно. Но это сделано для чего-то другого.

+0

't' только слушает' d1', поэтому вы никогда не получите массив с обоими значениями. Обе отложенные решения разрешаются (если вы добавляете консоль в 'd2.promise.then'. Angular-prom-tracker создает обещания обертки и дает вам прослушиватель событий. – kalley

+1

вы принимаете ответ без обещаний? –

+0

@d ' alar'cop Я согласился, потому что решил проблему, не используя «обещания». Таким образом, не-использование обещаний было решением. Несколько строк кодов и дали мне такое же поведение. Вот почему. – Ismael

ответ

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 это функция, которую вы хотите иметь место на задержке. Это также дает вам возможность изменить значение задержки по вашему желанию.

Cheers.