2014-01-15 102 views
0

我想輪詢一個數據庫的輪詢函數工作的幾列的值。不過,我希望能夠使用延遲來讓調用輪詢函數的函數知道它何時完成。使用我有什麼下面我得到或者是沒有方法,「解析」或有沒有方法「承諾」的錯誤與jQuery推遲投票

//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(); 
}; 
+0

是$ .Deferred變量設置爲具有方法「resolve」和「promise」的對象的實例嗎? – sjkm

+0

我明白你的意思我需要$ .Deferred()不是$ .Deferred – Timigen

回答

2

$.Deferred僅僅是一個jQuery對象的方法。你需要構造一個Deferred對象來使用它:

var deferred = new $.Deferred(); 
+0

'new'是可選的。 –