javascript - multiple - when then fail



jQuery.whenで複数の "then"チェーン (1)

.then内部で無名関数を使用し、渡すパラメーターを渡します。 私はあなたに必要なものではないので.doneと置き換えます。この場合は。

function do_something() {
    // some code

    return $.when(foo, bar, baz).done(function(_foo_2, _bar_2, _baz_2){
        do_something_else.apply(this,_foo_2);
    });
}

実際に新しい遅延オブジェクトを作成し、それをチェーンに送ります。 .thenから何も返さなかったので、新しい遅延オブジェクトには引数がありません。 この例を参照してください。

$.when($.Deferred().resolve(2), $.Deferred().resolve(4))
.then(function(a,b) { 
    console.log(a,b); // 2,4
    return $.Deferred().resolve(a,b,6);
}).then(function(a,b,c) { 
    console.log(a,b,c); // 2,4,6
});

代わりに.done使用しただけでは、期待どおりに動作します。

$.when($.Deferred().resolve(2), $.Deferred().resolve(4))
.done(function(a,b) { 
    console.log(a,b);
}).done(function(a,b) { 
    console.log(a,b);
});

.thenの最も一般的な使い方は、連鎖するajaxリクエストです。

$.ajax({...}).then(function(){
    return $.ajax({...});
}).then(function(){
    return $.ajax({...});
}).then(function(){
    return $.ajax({...});
}).then(function(){
    return $.ajax({...});
});

これはループでも簡単に実行できます。 その後、それぞれが以前の要求から返されたデータにアクセスします。

私はこのようなことをする関数を持っています:

function do_something() {
    // some code

    return $.when(foo, bar, baz).then(do_something_else);
}

function do_something_else(_foo, _bar, _baz) {
    // do something else

    return /* the original inputs */;
}

したがって、誰かがdo_something使用do_somethingと、次のようなさらに多くのコールバックをチェーンすることができます。

do_something().then(function(_foo_2, _bar_2, _baz_2) {
    console.log(_foo_2, _bar_2, _baz_2);
});

問題は、 do_something_elseから記述された無名関数への元の戻り値をバイパスする方法がわかりません。 私はリストを受け取るのではなく、代わりに位置の引数を受け取りたいので、 "foo"がdo_something_elseの_fooに値を挿入し、同じ値が_foo_2に渡されます。

JSでどうすればいいですか?





jquery-deferred