3

私の主な目標は、カウンターがトリガーされる前にカウンターを遅らせることです。

'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", "800"] ではなく ["1000"] のみを出力します。

これまでの私の検索:

スタックオーバーフローは私を助けませんでした。

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 に答える