是否有可能在javascript中使用异步方法进行迭代

时间:2016-03-16 00:26:15

标签: javascript ajax asynchronous struts2

我有一个带有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秒钟。 =(

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您不关心旧浏览器(谁不支持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.

您的方法应该有两个新参数:resolve和reject,它们是解析或拒绝promise的函数。那么。然后工作。

如果您关心旧浏览器,可以使用其他实施https://www.promisejs.org/或查看is there a way to implement promises in ie9+

  

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise以获取参考资料