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);
});
このように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);
});
第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);
});
また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);
この場合は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
登録日 : 2012年12月18日 最終更新日 : 2012年12月18日