鍍金池/ 問答/HTML5  HTML/ 關(guān)于jQuery Deferred 對象的使用, 這個問題百思不解,求教

關(guān)于jQuery Deferred 對象的使用, 這個問題百思不解,求教

碰到一個例子,自己想來想去沒明白:

function A() {
    var deferred = $.Deferred();
    setTimeout(function() {
        console.log( 'A return.' );
        deferred.resolve("A return!");
    }, 1000);

    return deferred.promise();
}

function B() {
    var deferred = $.Deferred();
    setTimeout(function() {
        console.log( 'B return.' );
        deferred.resolve( "B return!");

    }, 2000);

    return deferred.promise();
}

function C() {
    console.log( 'C return.' );
}

//這樣子運行時,
$.when( A() ).then( B ).then( C );
//輸出結(jié)果:
A return.
B return.
C return.

//如果是這樣運行時,
$.when( A() ).then( B() ).then( C() );
//輸出結(jié)果:
C return.
A return.
B return.

只是改寫了 B->B(), C->C(), 好象沒什么區(qū)別? 為什么輸出結(jié)果不一樣了呢?

回答
編輯回答
離魂曲

加兩個console你就明白了。

function A() {
    console.log('enter A');  // 1
    var deferred = $.Deferred();
    setTimeout(function() {
        console.log( 'A return.' );
        deferred.resolve("A return!");
    }, 1000);

    return deferred.promise();
}

function B() {
    console.log('enter B');  // 2
    var deferred = $.Deferred();
    setTimeout(function() {
        console.log( 'B return.' );
        deferred.resolve( "B return!");

    }, 2000);

    return deferred.promise();
}

function C() {
    console.log( 'C return.' );
}

//這樣子運行時,
$.when( A() ).then( B ).then( C );
//輸出結(jié)果:
A return.
B return.
C return.

//如果是這樣運行時,
$.when( A() ).then( B() ).then( C() );
//輸出結(jié)果:
C return.
A return.
B return.
2017年8月13日 17:38