私はクライアント側の初心者で、jQuery Deferred オブジェクト、特にチェーンに頭を悩ませようとしています。フィルタリングが機能しているときに、あるプロミス オブジェクトが別のプロミス オブジェクトに置き換わるケースがあります。
// works great. output:
// about to resolve top layer
// top layer then results: {"id":"top_layer_deferred"}
// about to resolve second layer item 0
// top layer done: {"id":"second_layer_deferred"}
var top_layer_deferred = $.Deferred();
setTimeout(function() {
console.log('about to resolve top layer');
top_layer_deferred.resolve( { id: 'top_layer_deferred' } )
}, 10000 );
var top_layer_filter = top_layer_deferred.promise().then( function( results ) {
console.log('top layer then results: ' + JSON.stringify(results) );
var second_layer_deferred = $.Deferred();
setTimeout(function() {
console.log('about to resolve second layer item 0');
second_layer_deferred.resolve( { id: 'second_layer_deferred' } )
}, 2000 );
return second_layer_deferred.promise();
});
top_layer_filter.done( function(results) {
console.log('top layer done: ' + JSON.stringify(results) );
});
今度は同じことをしたいのですが、フィルター コードで promise オブジェクトの配列を返します。(簡単にするために、配列に promise オブジェクトを 1 つだけ配置し、解決する引数を使用していません。) しかし、フィルター コードは、あたかもその引数が表示されないかのように、時期尚早に起動します。
// doesn't work. output:
// about to resolve top layer
// top layer then results: {"id":"top_layer_deferred"}
// top layer done:
// about to resolve second layer item 0
var arr = [];
var top_layer_deferred = $.Deferred();
setTimeout(function() {
console.log('about to resolve top layer');
top_layer_deferred.resolve( { id: 'top_layer_deferred' } )
}, 10000 );
var top_layer_filter = top_layer_deferred.promise().then(function( results ) {
console.log('top layer then results: ' + JSON.stringify(results) );
var second_layer_deferred = $.Deferred();
setTimeout(function() {
console.log('about to resolve second layer item 0');
second_layer_deferred.resolve()
}, 2000 );
arr.push( second_layer_deferred.promise() );
return arr;
});
top_layer_filter.done( function() {
console.log('top layer done: ' );
});
ライン交換してみた
top_layer_filter.done( function() {
と
$.when.apply(null,top_layer_filter).done( function() {
しかし、それは結果を変えません。
私が欠けているものについてのアイデアはありますか?
ポリー