11

非常に単純な質問です。これを理解できると思っていましたが、答えがわかりませんでした。

遅延オブジェクトの完了/失敗/常にキューにアタッチされたハンドラーをクリア/削除することは可能ですか?

var dfd = $.Deferred()

dfd.done(foo).fail(bar);

// User interacts with the page in a way that I do not want to fire foo or bar 
// when dfd is resolved or rejected

<<answer here>>
4

3 に答える 3

2

いいえ、 に既に登録されているコールバックを削除するメカニズムはありません$.Deferred()

.promise()ほとんどの場合、deferredのインターフェースにしかアクセスできず、コールバックを登録して promise の状態を読み取ることしかできません。公開されたメソッドを介して promise を変更することはできません。

あなたの場合、ユーザーの操作によって変更された他の状態変数をチェックし、続行するかどうかを決定するために、登録されたコールバックが必要になります。

于 2013-10-24T09:07:27.517 に答える
0

問題の見方が間違っているだけかもしれません。あなたが本当にやりたいことは、遅延を無視できるように XHR をキャンセル (中止) することのようです。

同様の質問に対するこの回答は、この例を示しています: https://stackoverflow.com/a/11863085/545296

于 2013-10-24T14:37:07.667 に答える