JavaScript循环并等待函数
我有一个简单的一维数组,比方说:JavaScript循环并等待函数,javascript,jquery,arrays,function,loops,Javascript,Jquery,Arrays,Function,Loops,我有一个简单的一维数组,比方说: fruits = ["apples","bananas","oranges","peaches","plums"]; 我可以使用$循环。每个()函数函数: $.each(fruits, function(index, fruit) { showFruit(fruit); }); 但是我正在调用另一个函数,在继续下一项之前,我需要完成这个函数 如果我有这样一个函数: function showFruit(fruit){ $.getScript
fruits = ["apples","bananas","oranges","peaches","plums"];
我可以使用$循环。每个()函数
函数:
$.each(fruits, function(index, fruit) {
showFruit(fruit);
});
但是我正在调用另一个函数,在继续下一项之前,我需要完成这个函数
如果我有这样一个函数:
function showFruit(fruit){
$.getScript('some/script.js',function(){
// Do stuff
})
}
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是单线程的。直到它调用的函数返回,它才会继续。您不需要检查。如果您希望在加载下一个水果之前附加一个水果,那么您就无法按照现有的方式构造代码。这是因为对于像
$.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();
})();
数组:
fruits=[]
。你拥有的是一个物体。仅供参考。@ahren这不是对象,这是语法错误;)但是您的代码没有您期望的行为?很抱歉,最近JSON太多了,我使用的代码工作正常,它只会导致错误,因为它无法完成上一个函数调用。让我猜猜,当您调用showFruit
时,#一些div
在DOM中不存在,你想知道为什么没有任何元素出现。。。。除非函数是异步的。但本例中并非如此,我调用的函数调用其他脚本,这些脚本的动态加载似乎并没有停止下一个循环proceed@Fluidbyte,您需要制作一个简化的测试用例是的,请为我们提供最简单的版本,该版本无法工作。$.getScript()
及其相关的完成回调是异步的,所以这个答案对于这个特定的问题是不正确的。比我的答案好得多-它有助于了解jQuery。fruits[i]代码>应为<代码>水果[索引]代码>我假设的最后一秒变量名更改::-)我试图编辑,但更改中没有足够的字符。@graystateiscoming-已修复。Thx.添加了一个带有async/await
的ES7示例。