使用`$ .Deferred()`,但在每个预先安排的函数之前触发一个函数

时间:2014-11-20 09:57:54

标签: jquery jquery-deferred

我得到了前面的答案,我的问题,我使用jQuery命令$.Deffered()学习了。这是非常有用和激动人心的时刻,但在继续进行的过程中,我发现我的一个功能在一切之前被解雇了。这是我的代码。

            function clearMsg() {
                var defer = $.Deferred();
                console.log('clearMsg() called..');

                $('#status > span').hide(400);

                setTimeout(function() {
                    defer.resolve();
                }, 400);

                return defer;
            };

            function addMsg( type, sign, text ) {
                var defer = $.Deferred();
                console.log('addMsg() called..');

                $('#status').append('<span class="text-'+type+'"><span class="glyphicon glyphicon-'+sign+'"></span> '+text+'</span> ').children(':last-child').show(400);

                setTimeout(function() {
                    defer.resolve();
                }, 400);

                return defer;
            };

            function addMsg_total() {
                var defer = $.Deferred();
                console.log('addMsg_total() called..');

                addMsg( 'success', 'ok', 'Total '+opt.total.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")+' nodes were found.' );

                setTimeout(function() {
                    defer.resolve();
                }, 400);

                return defer;
            };

            function addMsg_pagenation() {
                var defer = $.Deferred();
                console.log('addMsg_pagenation() called..');

                addMsg( 'info', 'ok', opt.pageNow+' of '+opt.pageEnd+' pages.' );

                setTimeout(function() {
                    defer.resolve();
                }, 400);

                return defer;
            };

..以下是我的工作。

clearMsg()
    .then(addMsg_total)
    .then(addMsg_pagenation)
    .then(addMsg('warning', 'warning-sign', 'Requested node was out of range.'));

..我希望最后一个addMsg()函数在所有序列结束后开始,但addMsg()刚开始。

为什么?理解这一点我需要知道什么?

1 个答案:

答案 0 :(得分:2)

因为您通过在末尾添加()来调用它

clearMsg()
    .then(addMsg_total)
    .then(addMsg_pagenation)
    .then(function(){
        return addMsg('warning', 'warning-sign', 'Requested node was out of range.')
    });