$(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/