2017年2月13日 星期一

(js)jquery.Deferred() 序列的用法

看三小賤人,不要臉的賤畜生


/**
         * 取得非同步工作
         */
        function getAsyncTask(def) {

            if (typeof getAsyncTask.index === 'undefined') {
                getAsyncTask.index = 0;
            }

            return function() {
                // debugger

                console.log('mission(%d) begin', getAsyncTask.index);

                setTimeout(function() {
                    // debugger;

                    console.log('mission(%d) finish', getAsyncTask.index++);

                    // important,通知工作結束
                    def.resolve();
                }, (1000 + Math.random() * 2000));
            };
        }
        ////////////////////////////////////////////////////////////////////////
        function doIt_1() {

            // 對列
            job_1().then(job_2).then(job_3).then(job_4);


            /* ============================================================== */
            function job_1() {
                var def = $.Deferred();
                var fun = getAsyncTask(def);

                fun();

                return def.promise();
            }
            /* ============================================================== */
            function job_2() {
                var def = $.Deferred();
                var fun = getAsyncTask(def);

                fun();

                return def.promise();
            }
            /* ============================================================== */
            function job_3() {
                var def = $.Deferred();
                var fun = getAsyncTask(def);

                fun();

                return def.promise();
            }
            /* ============================================================== */
            function job_4() {
                var def = $.Deferred();
                var fun = getAsyncTask(def);

                fun();

                return def.promise();
            }
            /* ============================================================== */
        }

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Promise.series用法
function job1() { return new Promise(function (res, rej) { console.log('p_1 start'); setTimeout(function () { console.log('p_1 end'); res(); }, 2000); }); } function job2() { return new Promise(function (res, rej) { console.log('p_2 start'); setTimeout(function () { console.log('p_2 end'); res(); }, 2000); }); } function job3() { return new Promise(function (res, rej) { console.log('p_3 start'); setTimeout(function () { console.log('p_3 end'); res(); }, 2000); }); } /* ================================================ */ job1().then(function () { return job2(); }).then(function () { return job3(); });


沒有留言:

張貼留言