2017-03-16 55 views
0

我正在使用jquery「when,then」來執行一些操作。我正在使用doAddProcedure函數來執行一些計算。我期待的結果就像在執行doAddProcedure函數中的代碼之後,控制將返回到AddProcedures,然後返回到完成部分中的代碼。但它沒有按預期工作。此外,我正在顯示在doAddProcedure部分中執行代碼期間顯示的加載程序。加載程序沒有顯示執行doAddProcedure中的代碼所花費的時間。請幫我解決issue.Sorry,我的英語jquery「when + Then」未按預期工作

這是我的代碼

var tot_codes = 0; 
    function doAddProcedure(thisval) 
    { 

     top.ShowAjaxLoader('Loading..');  
     var countval = $("#last_id").val(); 


      //My code block.... 
     return true; 
    } 
    /** 
    * Function to add procedures 
    * @returns {undefined} 
    */ 
    function AddProcedures(thisval) 
    { 
     $.when(doAddProcedure(thisval)).then(function(){   
      if (tot_codes > 0) { 
       //setTimeout(function(){ 

       top.notification('successfully added the codes.');    
       //top.window.parent.document.getElementById('circularG').hide(); 
       window.parent.phFrntpayClosePopup();   
       //top.window.parent.document.getElementById("loaderHtml").style.display = "none";   
       //}, 3000); 

     } else {   
      top.notification('Please select atleast one code.');  
     }   
     }); 
    } 

AddProcedures(thisval); // Calling main Function 
+0

[鏈接](http://stackoverflow.com/help/mcve) –

+0

我減少代碼塊。 –

回答

1

這是因爲當你不通過一個延期或承諾到when那麼then立即執行。看看爲When..Then

在你的情況你是治療的when()就好像它是某種if條件等待true jQuery的文檔......我建議你閱讀更多關於PromiseDeferred再回來的when..then邏輯或使用Promise。

你當然可以使用回調函數的象下面這樣:

doAddProcedure(thisVal,callbackFunc){ 
// do stuff 
callbackFunc(); 
// If you wish to wait a moment (say 3 seconds here) before the callbackFunc() is called, and it is purely cosmetic, then comment the above and uncomment the below ! 
//setTimeout(callbackFunc, 3000); 
} 

myFunction = function(){   
      if (tot_codes > 0) { 
       //setTimeout(function(){ 

       top.notification('successfully added the codes.');    
       //top.window.parent.document.getElementById('circularG').hide(); 
       window.parent.phFrntpayClosePopup();   
       //top.window.parent.document.getElementById("loaderHtml").style.display = "none";   
       //}, 3000); 

     } else {   
      top.notification('Please select atleast one code.');  
     }   
     }; 

function AddProcedures(thisval) 
    { 
     doAddProcedure(thisval, myFunction); 
    } 
+0

我剛剛拿到了上面的鏈接,但所有的例子都是針對ajax的。你能給我一個像上面這樣的示例代碼嗎?我在前端腳本方面經驗不足。 –

+0

我建議你那麼簡單地使用一個回調函數來解決它,否則你最終會實現一些你根本不瞭解的東西,或者在你到達那裏之前可能需要大量的閱讀。 –

+0

我像上面說的那樣改變了我的代碼。但我的加載圖片未顯示。它會顯示我是否在top.notification('成功添加代碼')之後返回false。 。這是用於隱藏加載器的代碼。 –