是否有可能在 JavaScript 中使用异步方法进行迭代
is it possible an iteration with asynchronous methods in javascript
我有一个带有Struts 2的JSP包括:
<div id="data">
<s:include value="list.jsp"/>
</div>
list.jsp 里面有一个迭代器。
使用 JavaScript,我有 3 个函数可以对不同的操作和 Web 服务进行 Ajax 调用,但 3 个函数刷新相同的 Java 对象列表:
function firstCall(product) {
// an ajax call
.done(function(html) {
$("#data").append(html);
});
}
function secondCall(product) {
// an ajax call
.done(function(html) {
$("#data").append(html);
});
}
function thirdCall(product) {
// an ajax call
.done(function(html) {
$("#data").append(html);
});
}
我还有另一个函数可以迭代一串产品数组:
function iterate(productos){
for(i=0;i<productos.length;i++){
firstCall(productos[i]);
secondCall(productos[i]);
thirdCall(productos[i]);
}
}
我的问题是我需要这三个方法是异步的,因为每个方法需要 10 秒。 =(
有更好的方法吗?
如果你不关心旧的浏览器(不支持ES6),你可以使用promises。它会变成
new Promise(firstCall(productos[i]));
new Promise(seccondCall(productos[i]));
new Promise(thirdCall(productos[i]));
//You can add .then(function(){"code"}) to do something after it's done.
你的方法应该有两个新参数:solve和reject,它们是解析或拒绝承诺的函数。所以.then工作。
如果您关心较旧的浏览器,您可以使用其他实现 https://www.promisejs.org/或查看是否有办法在 ie9+ 中实现承诺
请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise 以供参考
相关文章:
- 创建一个方法,通过一个窗口进行迭代并获取Titanium中的所有控件
- 使用Javascript迭代同级的最快方法是什么
- Javascript:如何迭代对象[Key:value],但跳过一些键([最快的方法])
- 在JavaScript中异步迭代大型数组,而不会触发超出堆栈大小
- 异步mongodb更新循环中最后一次迭代后的重定向
- 迭代Promise迭代器的非递归方法
- 嵌套的异步.each系列堆栈迭代
- 节点.js异步数组迭代
- 如何重新构建此 for 循环,以便在异步 api 调用完成之前不会进行下一次迭代
- 迭代中的异步函数 - javascript
- 是否有可能在 JavaScript 中使用异步方法进行迭代
- JavaScript uncatch TypeError:无法在第二次迭代时调用未定义的方法“拼接”
- 每次迭代在 Foreach 循环中重复 PHP 睡眠方法
- 有没有办法迭代函数作用域内的公共方法
- 在 javascript 中 for 循环的每次迭代中声明一个新的、唯一的变量是一种好方法
- 在循环中使用 q promise 的最佳方法是什么?等待链完成,然后再迭代到下一个
- 是否可以在 ES6 Set 实例上使用数组迭代方法
- 在数组(或objs)上迭代异步的最聪明/最干净的方法是什么?
- 异步.forEach迭代器数据格式化问题
- 如何使用jquery $.each()方法迭代对象文本数组