Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用循环多次(同步)调用同一异步函数?_Javascript_For Loop_Asynchronous_Callback - Fatal编程技术网

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

Javascript 如何使用循环多次(同步)调用同一异步函数?,javascript,for-loop,asynchronous,callback,Javascript,For Loop,Asynchronous,Callback,我有一个名为“products”的数组,它随页面加载的不同而变化。然后,我需要调用函数“addProduct()”,调用次数与“products”的长度相同,并使用该函数中每个索引的修改值。函数很长很复杂,并且使用异步调用(如.get)。在addProduct()完成执行之前,如何阻止for循环进入下一个迭代 function addProduct(productVariable){ // (...do some long and asynchronous things with

我有一个名为“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);
 }
函数addProduct(productVariable){
//(…使用productVariable执行一些长时间异步操作…)
}
//products数组在每次页面加载时的长度可能不同
产品=[“prod01”、“prod02”、“prod03”、“prod04”、“prod05”、…];
对于(变量i=0;i

我一直在阅读有关回调和承诺的文章,但不管我何时使用它们,函数似乎都是异步启动的。感谢您的帮助

将利用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])
函数addProduct(productVariable){
$.ajax({
url:您的\u操作\u服务器\u url,
上下文:document.body,
成功:函数(){
addNextProduct()
}
})
}
函数addNextProduct(){
索引++;
if(指数<产品长度)
addProduct(产品[索引])
} 
产品=[“prod01”、“prod02”、“prod03”、“prod04”、“prod05”、…];
指数=0;
addProduct(产品[索引])

将利用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])
函数addProduct(productVariable){
$.ajax({
url:您的\u操作\u服务器\u url,
上下文:document.body,
成功:函数(){
addNextProduct()
}
})
}
函数addNextProduct(){
索引++;
if(指数<产品长度)
addProduct(产品[索引])
} 
产品=[“prod01”、“prod02”、“prod03”、“prod04”、“prod05”、…];
指数=0;
addProduct(产品[索引])

使用一个递归函数,该函数在完成异步操作后使用全局计数器调用自身,以迭代所有产品。我在打电话,所以写代码太难了。试试看。@AlvaroFlañoLarrondo谢谢Alvaro,这可能就是我要找的。如果您有时间记下一些笔记,我们将不胜感激……谢谢!“我的想法几乎正是@mohamed ibrahim所回答的。”AlvaroFlañoLarrondo好的,非常感谢!使用一个递归函数,该函数在完成异步操作后使用全局计数器调用自身,以迭代所有产品。我在打电话,所以写代码太难了。试试看。@AlvaroFlañoLarrondo谢谢Alvaro,这可能就是我要找的。如果您有时间记下一些笔记,我们将不胜感激……谢谢!“我的想法几乎正是@mohamed ibrahim所回答的。”AlvaroFlañoLarrondo好的,非常感谢!谢谢@mohamed ibrahim。如果你不介意澄清一下这个场景。。什么会进入test.html?很抱歉,这是一个例子,您应该用您的urlThreak@mohamed ibrahim重新封装它。如果你不介意澄清一下这个场景。。什么会进入test.html?抱歉,这是一个例子,你应该用你的url重新拼贴它