Javascript 如何使用循环多次(同步)调用同一异步函数?
我有一个名为“products”的数组,它随页面加载的不同而变化。然后,我需要调用函数“addProduct()”,调用次数与“products”的长度相同,并使用该函数中每个索引的修改值。函数很长很复杂,并且使用异步调用(如.get)。在addProduct()完成执行之前,如何阻止for循环进入下一个迭代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
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重新拼贴它