1つのJQuery.Deferred()オブジェクトのすべてのイベントを別のものに伝播するにはどうすればよいですか?JQuery.Deferredオブジェクト間のイベントの伝播
他のオブジェクト.rejectWith
と.resolveWith
を呼び出すことによって、両方の.fail
と
.then
.done
を扱うより良い/単純/短い方法はありますか? 私は、拒否または解決を呼び出すときに呼び出されるので、
.done
.then
を処理する必要はないと仮定しています。
おそらくこれは.pipe
を使って行うことができると思われますが、わかりません。
UPDATE:
注:私も、私はフレデリック・ハミディさんのコメント@あたり上記の文章の一部を修正しました。私が達成しようとしています何
は以下の通りであった:
私は、彼らが($ .Deferredそのものである)Ajaxオブジェクトを返します 、サーバーへのAJAX呼び出しを作っていたAPIを持っていました。
ある時点で、私はネットワークを利用できなかった状況を処理する必要がありました(これは、モバイルデバイス上で実行されるphonegapアプリケーション用です)。
私がやりたかったのは、ネットワークに接続できない場合、ネットワークの問題を修正し、 "再試行"するように求めるダイアログを表示するということでした。
しかし、このシナリオでは、ユーザーが再試行するまで$ .ajaxを呼び出さないため、$ .Defferredオブジェクトがなく、最初にAPIで呼び出された関数を返すことはありません。
私は新しい$ .Defferredを作成してそれを返し、再試行ボタンのコールバックで$ .ajax自身を "リレー"に設定し、デファードされたイベントを私はちょうど閉鎖の一部としてそれを保持することによって戻った。
しかし、私はそれを行う方法がわかりませんでした。
ユーティリティメソッドフィルタリングおよび/またはチェーンのDeferredする:
.pipe
方法と私の重複が整理は、その記述が言うのでそのaがあります。
これは私の質問をより明確にします。
は私が正しくあなたの質問を理解していません。 'then()'は 'fail()'を2番目の引数でカバーするので、同時に両方を使う必要はありません。 'pipe()'は実際に遅延呼び出しの結果を別のものに渡す方法ですが、その場合でも 'resolveWith()'、 'rejectWith()'、 'notifyWith()'を呼び出さなければなりません。 (または、 '$ .ajax()'のようなものを持っています)、パイプされた遅延呼び出しを解決します。達成したいことの例を挙げることができますか? –
私はこの質問を読んで、突然、私は「jQuery.deferred」という概念全体について考えていないことに気付きました。 ...もう一晩中寝る。 =/ –