如何转换for循环与异步操作内部

How to transform for loop with asynchronous operation inside

本文关键字:循环 异步操作 内部 for 何转换 转换      更新时间:2023-09-26

我有一个场景,我在一个页面中有一个可变数量的网格,当用户单击一个按钮时,我需要做以下操作:

对于每个网格

  1. 从网格中获取一些数据
  2. 显示写入数据的对话框
  3. 在对话框关闭后执行$.post()操作
  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窗口小部件的对话框),所以我需要转换循环,使过程同步。

谁能告诉我如何完成这个?

谢谢。

您可以在函数中从数组中获取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();