如果您希望在加载下一个水果之前附加一个水果,那么您无法按照您的方式构建代码。那是因为对于像这样的异步函数$.getScript()
,没有办法让它等到完成后再继续执行。可以使用 a$.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
}
})();