如何转换for循环与异步操作内部
How to transform for loop with asynchronous operation inside
我有一个场景,我在一个页面中有一个可变数量的网格,当用户单击一个按钮时,我需要做以下操作:
对于每个网格
- 从网格中获取一些数据
- 显示写入数据的对话框
- 在对话框关闭后执行$.post()操作
- 处理下一个网格
下面是我所做的代码片段
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();
相关文章:
- 如何指示“;熟度;在异步操作中
- 使用jquery更改异步操作中的文本值
- 节点.js中的嵌套异步操作
- 阻止chrome.webRequest.onBeforeSendHeaders侦听器中的异步操作
- 节点.js和表达式:如何在异步操作后返回响应
- 无法在Redux中测试异步操作
- 当我在异步操作Redux上开始单元测试时,没有定义错误承诺
- 循环中的异步操作
- 回流如何侦听异步操作已完成
- 我们可以使用Jasmine在测试中执行异步操作吗
- jQuery:如何检查以确保所有异步操作都已完成
- JavaScript ES6 承诺在 while 循环中调用异步操作
- 请等待异步操作 (firebase) 调用完成,然后再加载网页
- 具有 Javascript 同步接口的异步操作
- 如何在异步操作期间使 Express.js 日志错误
- 如何在 $ 中执行异步操作.延迟,然后失败过滤回调并传递回成功链
- Redux 中的异步操作
- Redux - 智能组件 - 在挂载组件之前如何处理异步操作
- Javascript 中的异步操作
- 如何转换for循环与异步操作内部