如何在执行下一行之前等待执行完成

How to wait for an execution to finish before doing next line

本文关键字:执行 一行 等待      更新时间:2023-09-26

标题说明了一切。我已经找到了一些答案(关于回调和其他一些),但我不知道如何将其应用于我的代码。

问题:如何在执行下一行之前等待$( "#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);
}

您可以将第二个参数传递给.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);
    }); 
}

希望这能有所帮助。

$.load()采用可选的回调参数。您必须将加载完成后需要执行的代码放在函数中,并将该函数传递给$.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);
    }); 
}

不幸的是,在Javascript中没有办法将异步请求转换为同步请求,因为出于一些我不清楚的原因,我们决定在Javascript中将不可能嵌套事件循环。

例如,在Javascript中编写alert(msg)这样的东西是不可能的,因为这种限制是故意设置的。

"解决方法"是使用回调。。。也就是说,你不需要等待,而是需要告诉(在另一个函数中)你等待的事件何时发生,是否会发生。

StratifiedJs允许"等待"异步事件,隐藏了基于回调的控制流的复杂性,除非你真的想要它,但它是一个接受Javascript超集作为输入并生成Javascript的编译器。

您必须在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);
});

有关详细信息,请阅读此链接

祝好运