jquery custom deferred functions

后端 未结 2 1462
深忆病人
深忆病人 2021-01-31 12:12

I have three functions i\'m trying to run, the first two are doing some async stuff that need data for the third to use. I want the third function to fire only when 1 and 2 are

2条回答
  •  死守一世寂寞
    2021-01-31 12:32

    You should return promise object. You also have an error in this line:

    $.when(first(), second()).done(constructData());
    

    it should be

    $.when(first(), second()).done(constructData); // don't call constructData immediately
    

    So all together it could be:

    function run() {
        var data1 = {};
        var data2 = {};
    
        $.when(first(), second()).done(constructData);
    
        function first() {
            return $.Deferred(function() { // <-- see returning Deferred object
                var self = this;
    
                setTimeout(function() {   // <-- example of some async operation
                    data1 = {func: 'first', data: true};
                    self.resolve();       // <-- call resolve method once async is done
                }, 2000);
            });
        }
        function second() {
            return $.Deferred(function() {
                var self = this;
                setTimeout(function() {
                    data2 = {func: 'second', data: true};
                    self.resolve();
                }, 3000);
            });
        }
        function constructData() {
            //do stuff with data1 and data2
            console.log(data1, data2);
        }
    }
    

    http://jsfiddle.net/FwXZC/

提交回复
热议问题