用jQuery推迟轮询

时间:2014-01-15 14:38:11

标签: javascript jquery jquery-deferred

我正在尝试轮询数据库以查找轮询函数工作的几列的值。但是我希望能够使用deferred让调用轮询函数的函数知道它何时完成。使用我下面的内容,我得到一个没有方法'解决'或没有方法'承诺'错误

//how I call the poll function
poll(Guids.Creation,$.Deferred);

var poll = function (guid,defer) {
    var timeOut = 3000,
    url = 'handler.ashx',
    data = {
        cmd : 4 ,guid : guid
    };    
    App.Generic.ajax(url,"GET", this, data).done(function (data) {
        var orderStatusJSON = $.parseJSON(data);
        if (orderStatusJSON.hasOwnProperty('dateFinished') && orderStatusJSON.dateFinished === '') {
            setTimeout(function(){poll(guid,defer)}, 3000);
        } else {
            if (orderStatusJSON.hasOwnProperty('output')) {
                var successRegEx = /\bsuccess\b/i, 
                errorRegEx = /\berror\\b/i;    
                if(successRegEx.test(orderStatusJSON.output)) {
                    defer.resolve(orderStatusJSON);
                } else if (errorRegEx.test(orderStatusJSON.output)) {
                    defer.resolve(orderStatusJSON);
                } else {
                    defer.resolve(orderStatusJSON); //execute statement
                }
            }
        }
    });
    return defer.promise();
};

1 个答案:

答案 0 :(得分:2)

$.Deferred只是jQuery对象的一种方法。您需要构造一个Deferred对象来使用它:

var deferred = new $.Deferred();