2017年3月27日 星期一

(js)Pdeferred的用法之一(歪打正著,好威,老闆都要求我上班去),老闆屁都沒幫 fuck.....還是jq對岸威


// var $Deferred = require('../node_modules/$Deferred').$Deferred;

job_1();
/* ========================================================================== */

function job_1() {
    var pd = Pdeferred.resolve();

    pd = pd.then(function() {
        console.log('job_1 start');
    });

    pd = pd.done(function() {
        return job_1_1();
    });

    pd = pd.done(function() {
        console.log('job_1 end');
    });

    return pd;
}
/* ========================================================================== */
// job_1 的子程序

/**
 * 子流程是非同步
 *
 * 要等所有孩子都結束,才算結束
 */
function job_1_1() {
    console.log('job_1_1 start');

    var pd = Pdeferred.resolve('ts');
    /* ====================================================================== */
    // job_1_1 自己本身的 async_1
    pd = pd.then(
        function() {
            var def = Pdeferred();
            console.log('job_1_1 async_1 start');

            setTimeout(function() {
                console.log('job_1_1 async_1 end');
                def.resolve();
            }, 1000);
            return def;
        }
    );
    /* ====================================================================== */
    // job_1_1 自己本身的 async_2
    // 雖然寫法不同,但與 async_1 是相同意思
    pd = pd.then(function() {
        return Pdeferred(function(def) {
            console.log('job_1_1 async_2 start');

            setTimeout(function() {
                console.log('job_1_1 async_2 end');
                def.resolve();
            }, 1000);
        });
    });
    /* ====================================================================== */

    pd = pd.then(function() {
        // 子程序的非同步
        return job_1_1_1();
    });

    pd = pd.then(function() {
        // 子程序的非同步
        return job_1_1_2();
    });

    pd = pd.then(function() {
        console.log('job_1_1 end');
    });

    return pd;
}
/* ========================================================================== */
// job_1_1 的子程序

function job_1_1_1() {
    var def = Pdeferred();

    console.log('job_1_1_1 start');

    setTimeout(function() {
        console.log('job_1_1_1 end');
        def.resolve();
    }, 1000);

    return def;
}
/* ========================================================================== */
// job_1_1 的子程序
function job_1_1_2() {
    var def = Pdeferred();

    console.log('job_1_1_2 start');

    setTimeout(function() {
        console.log('job_1_1_2 end');
        def.resolve();
    }, 1000);

    return def;
}