javascript - 如何使用循环多次(同步)调用同一个异步函数?

标签 javascript for-loop asynchronous callback

我有一个名为“products”的数组,它随每次页面加载而变化。然后,我需要调用一个函数“addProduct()”,次数与“products”的长度一样多,并在该函数内使用每个索引的更改值。该函数很长很复杂并且使用异步调用(如 .get)如何在 addProduct() 完成执行之前阻止 for 循环进入下一次迭代?

 function addProduct(productVariable){

      // (...do some long and asynchronous things with productVariable...)
 }

 //products array can vary in length on each page load
 products = ["prod01","prod02","prod03","prod04","prod05",...];

 for (var i = 0; i < products.length; i++) {

      var productAlter = product[i];

      //(...do some things with productAlter, but wait 
      // until the previous loop's addProduct() function 
      // has completed successfully)

      addProduct(productAlter);
 }

我一直在阅读有关回调和 promise 的信息,但无论我何时放置它们,该函数似乎都是异步触发的。任何帮助表示赞赏!

最佳答案

将使用 Ajax 的成功回调来调用 addNextProdut,如果索引达到最大值,它将停止。

function addProduct(productVariable){
  $.ajax({
   url: your_action_server_url,
   context: document.body,
   success: function(){
     addNextProduct()
   }
   })
 }

 function addNextProduct(){
    index++; 
    if(index < products.length)
      addProduct(products[index])
 } 

 products = ["prod01","prod02","prod03","prod04","prod05",...];
 index = 0;
 addProduct(products[index])

关于javascript - 如何使用循环多次(同步)调用同一个异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33150987/

相关文章:

C#异步对象

javascript - 如何创建类来获取 javascript

javascript - 谁能帮我为这段代码制作一个for循环?

java - 在 arraylist for 循环中执行 Collections.swap() 是否安全?

.net - 从方法中将 BlockingCollection 作为 IEnumerable 返回

c# - 如何创建自定义 SynchronizationContext 以便所有延续都可以由我自己的单线程事件循环处理?

javascript - 如何将一个数组中的值与另一个数组中的键进行比较?

javascript - 我似乎无法让提交按钮显示总数

javascript - 使用 firebug 调试 jquery 或 javascript

arrays - 迭代结构类型的数组