pipe()

このエントリーをはてなブックマークに追加

deferred.pipe()はDeferredに対してフィルターを設定したりチェーンさせる為のメソッドです。

deferred.pipe()はjQuery 1.8.0から非推奨になりました。代わりにdeferred.then()の利用が推奨されています。

var def = $.Deferred();
var filter = def.pipe(function( value ) {
	return value * 2;
});
def.resolve( 5 );
filter.done(function( value ) {
  alert(value);
});

sample

このようにresolveメソッドの引数では5を受渡しているがdoneメソッドが実行される前にpipe()を経由するので10がアラートで表示されます。

第2引数ではfail()時のフィルターが設定できます。

var def = $.Deferred();
var filter = def.pipe(null,function( value ) {
	return value * 2;
});
def.reject( 5 );
filter.fail(function( value ) {
  alert(value);
});

sample

第3引数ではprogress()時のフィルターが設定できます。

var def = $.Deferred();
var filter = def.pipe(null,null,function( value ) {
	return value * 2;
});
def.notify( 5 );
filter.progress(function( value ) {
  alert(value);
});

sample

またDeferrdを利用したチェーンも可能になっている。

var def1 = $.Deferred().done(function(){
	$("body").append("<p>1</p>");
});
  
var def2 = def1.pipe(function( value ) {
	var def = $.Deferred().done(function(){
		$("body").append("<p>2</p>");
	});
	setTimeout(function(){
		def.resolve();
	},500);
	return def;
});
  
var def3 = def2.pipe(function( value ) {
	var def = $.Deferred().done(function(){
		$("body").append("<p>3</p>");
	});
	setTimeout(function(){
		def.resolve();
	},500);
	return def;
});
  
setTimeout(function(){
	def1.resolve();
},500);

sample

この場合は3つの処理が500ms秒後ごとに実行されていきます。チェーン時にpipe()はコールバック関数が返したDeferredオブジェクトをPromiseオブジェクトに変換して返します。

jQuery 1.6.0での追加/変更

deferred.pipe()はjQuery 1.6.0で追加されたメソッドです

jQuery 1.7.0での追加/変更

progressフィルターはjQuery 1.7.0で追加された機能です

参考URL

deferred.pipe() – jQuery API

登録日 : 2012年12月18日 最終更新日 : 2012年12月18日

同じカテゴリー(Deferred)のエントリー

検索

スポンサードリンク

バージョン

リファレンス