javascript - 如何避免javascript中的异步?

标签 javascript jquery asynchronous

$(document).ready(function () {
    $.get("...", function (domus, status) {
        console.log(1);
    }
    console.log(2);
}

使用这段代码,根据JavaScript异步规则,console.log(2)console.log(1)之前执行(并打印) .

我需要执行$.get返回的回调(打印的内容 console.log(1) )严格位于以下代码行之前。

最佳答案

简而言之,你不能。

没有办法强制异步函数同步。相反,如果您有异步操作,则必须构建所有代码来处理该操作。

你最好的选择就是接受异步性并内置它来处理它:

$.get('', function () {
  console.log(1);
}).then(function () {
  console.log(2);
});

从长远来看,这会给你带来最少的麻烦。

还有其他方法可以处理它,例如使用值来跟踪某些事情是否完成,然后设置超时来定期检查:

let ready = false;

$.get('', function () {
  ready = true;
  console.log(1);
});

function checkReady() {
    if (ready) {
      console.log(2);
    } else {
      setTimeout(checkReady, 500);
    }
}

checkReady();

这将在运行前每 500 毫秒检查一次是否已准备好。这将使您隐藏代码的异步性质。这可以在异步操作非常非常少的情况下工作,但如果您不小心,它也可能会导致困惑和奇怪的错误,因此请小心使用它。

关于javascript - 如何避免javascript中的异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44679090/

相关文章:

javascript - 使用 Python 逆向 XOR Javascript 混淆函数

javascript - 使用 MeteorJS Collection 和 Angular 2 显示数据

javascript - header 中的 <script></script> 不会在边缘浏览器中登录到控制台

jquery - 选择表格中除表格标题行以外的行

C#:如何在 F# 中实现为 "async"和 "!"?

javascript - 适用于 Node.js 和浏览器的模块系统?

javascript - 下拉值更改时如何检测值

javascript - append 数据属性时无法识别的表达式

java - 调用@Stateless bean 的@Asynchronous 方法时出现ContextNotActiveException

java - Spring 中@Async 方法上的@Transactional