JavaScript循环并等待函数
JavaScript Loop and wait for function
我有一个简单的一维数组,比方说:
fruits = ["apples","bananas","oranges","peaches","plums"];
我可以使用$.each()
功能循环通过:
$.each(fruits, function(index, fruit) {
showFruit(fruit);
});
但我正在调用另一个函数,在转到下一个项目之前我需要完成它。
所以,如果我有这样一个函数:
function showFruit(fruit){
$.getScript('some/script.js',function(){
// Do stuff
})
}
在继续之前,确保前一个水果已经附加的最佳方法是什么?
如果您希望在加载下一个水果之前附加一个水果,那么您就无法按照现有方式构建代码。这是因为对于像$.getScript()
这样的异步函数,没有办法让它等到完成后再继续执行。可以使用$.ajax()
并将其设置为同步,但这对浏览器不利(在联网过程中会锁定浏览器),因此不建议使用。
相反,您需要重组代码以异步工作,这意味着您不能使用传统的for
或.each()
循环,因为它们不是异步迭代的。
var fruits = ["apples","bananas","oranges","peaches","plums"];
(function() {
var index = 0;
function loadFruit() {
if (index < fruits.length) {
var fruitToLoad = fruits[index];
$.getScript('some/script.js',function(){
// Do stuff
++index;
loadFruit();
});
}
}
loadFruit();
})();
在ES7中(或在传输ES7代码时),您也可以使用async
和await
,如下所示:
var fruits = ["apples","bananas","oranges","peaches","plums"];
(async function() {
for (let fruitToLoad of fruits) {
let s = await $.getScript('some/script.js');
// do something with s and with fruitToLoad here
}
})();
浏览器中的Javascript是单线程的。直到它调用的函数返回,它才会继续。你不需要检查。
相关文章:
- 如何在jqGrid中使saveRow函数等待editRow函数
- 让 JavaScript 函数等待 Jquery 对话框模态的结果
- 如何在函数完成后使用 jQuery 进行动画处理 - 让第二个函数等待
- 如何使函数等待回调完成
- 让jquery函数等待它'的上一个呼叫已解决
- Javascript/jQuery使函数等待回调后再继续
- 让一个函数等待另一个变量
- 如何强制异步函数等待,直到完成
- 使函数等待/暂停;直到另一个结束
- 需要函数等待事件处理程序完成后再执行下一个函数
- Javascript函数等待另一个函数完成
- Javascript:让函数等待查询完成
- 我需要把'return'casper.then'块,让父函数等待子函数完成执行
- 使函数等待直到元素存在
- 美元.Ajax成功函数等待
- 如何让我的javascript函数等待html元素渲染
- 如何强制函数等待某个事件发生
- javascript/jquery:迭代调用函数;等待之前的通话结束
- 如何让JS函数等待执行
- 如何让NodeJs函数等待