2016-10-31 35 views
0

變換我已經在那裏我有一個可變數目電網的一個頁面,當用戶點擊一個按鈕,我需要做下面的情景:如何爲循環使用異步操作中

對於每個網格

  1. 從電網獲取的一些數據
  2. 顯示一個對話框寫一些數據
  3. 做一個$。員額()操作的對話框關閉
  4. 過程中的下網後

下面是我在做什麼

for (var i = 0; i < grids.length; i++) { 
    var grid = grids[i]; 

    // Process some grid's data 
    ... 

    // Show a dialog box to write some extra data 
    dialog.open(); // dialog is a Telerik Window widget 

    // When the dialog box is closed do a $.post() 
    $.post(...) 
     .fail(function(error) { 

     }) 
     .done(function(data) { 

     }); 
} 

我現在面臨的問題是一個代碼段,該對話框中的異步方式打開(我使用的對話框Telerik的窗口小部件)所以我需要將轉換爲循環以使進程同步。

任何人都可以告訴我如何做到這一點?

謝謝。

+0

不'dialog.open'返回任何類型的承諾? –

+0

不,但在這裏他們展示瞭如何通過Promises創建對話框** http://docs.telerik.com/kendo-ui/controls/layout/window/how-to/confirmation-dialog-promise – vcRobe

回答

0

您只需shift從函數中的數組:

var grids = [ 
    1, 
    2, 
    3, 
    4 
]; 

function doSomething() { 
    if (grids.length) { 
     var grid = grids.shift(); 

     //use setTimeout as a means of async 
     setTimeout(function() { 
      //do something 
      console.log(grid); 

      if (grids.length) { 
       doSomething(); 
      } 
     }, 100); 
    } 
} 

doSomething();