这是我的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
function f(){
setTimeout(function (){
let a=document.createElement("div");
a.id="AX";
document.body.append(a);
},1000);
}
function g(){
document.getElementById("AX").innerHTML="abc";
}
f();
g();
</script>
</body>
</html>
它本该输出abc,但是没有。因为g在f之前执行了。
我希望g在f之后执行。
要做成回调的形式执行g函数,要不f中添加div是延时执行的,执行g的时候并没有生成dom出错了
有帮助麻烦点个采纳【本回答右上角】,谢谢~~有其他问题可以继续交流~
<script>
function f(callback) {
setTimeout(function () {
let a = document.createElement("div");
a.id = "AX";
document.body.append(a);
callback();/////
}, 1000);
}
function g() {
document.getElementById("AX").innerHTML = "abc";
}
f(g);//这样调用就没问题了
</script>
可以使用promise或者async awit
写成一个函数不行吗?把
document.getElementById("AX").innerHTML="abc";
放在
document.body.append(a);
后面。
第一种方法,你可以把f函数的计数器去掉
第二种方法,如果你要保留计时器的话,可以做一个判断,我举个例子,你定义一个level = 0,你让f函数执行完level+1,判断level = 1是执行g函数,这样应该可以实现你的需求
回调函数,promise,async await