如何在执行下一行代码之前等待程序执行完成

3
标题已经说明了一切。 我找到了一些答案(关于回调和其他东西),但我不知道如何将其应用到我的代码中。
问题:如何在执行下一行之前等待$(“#layout-grid”)。load(layout);完成?
因为$(“#layout-grid”)。load(layout);尚未完成加载,所以最后一行的警报不会在第一次执行时显示。但是,在第二次执行时警报可以正确显示。
function setLayout(selectedLayout) {
    layout += selectedLayout;
    $( "#layout-grid" ).load(layout); // this load is not finished yet before alert
    var top_level_div = document.getElementById('layout');
    var count = top_level_div.getElementsByTagName('div').length;
    alert(count);
}
4个回答

6
您可以在调用 .load() 方法时传递第二个参数,它是一个回调函数,将在加载完成后触发。请参见此处:
function setLayout(selectedLayout) {
    layout += selectedLayout;
    $( "#layout-grid" ).load(layout, function(){
        var top_level_div = document.getElementById('layout');
        var count = top_level_div.getElementsByTagName('div').length;
        alert(count);
    }); 
}

希望这可以帮助到您。

5

$.load()方法可选一个回调参数callback。您需要将加载完成后需要执行的代码放入函数中,并将该函数传递给$.load

示例代码如下:

function setLayout(selectedLayout) {
    layout += selectedLayout;
    $( "#layout-grid" ).load(layout, function afterLoad() {
        var top_level_div = document.getElementById('layout');
        var count = top_level_div.getElementsByTagName('div').length;
        alert(count);
    }); 
}

2

很遗憾,Javascript中没有办法将异步请求转换为同步请求,因为由于某些原因,我不清楚,Javascript决定不能嵌套事件循环。

例如,在Javascript中无法编写alert(msg)之类的内容,这是因为有意地设置了这种限制。

“解决方法”是使用回调函数……也就是说,您需要告诉在您等待的事件发生时要做什么(在另一个函数中),如果它会发生。

有一个名为StratifiedJs 的工具可以“等待”异步事件并隐藏基于回调的控制流程的复杂性,除非您真的需要它,但它是一个编译器,接受Javascript的上集作为输入并生成Javascript代码。


1

你必须在jQuery中使用回调函数,例如,你的代码必须像这样编写:

function setLayout(selectedLayout) {
layout += selectedLayout;
$( "#layout-grid" ).load(layout,function(){
      var top_level_div = document.getElementById('layout');
var count = top_level_div.getElementsByTagName('div').length;
alert(count);
});

查看详细信息,请阅读 link

祝好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接