【发布时间】:2021-03-21 13:17:14
【问题描述】:
我是 Javascript 新手,目前正在开发一个网站,随着时间的推移它会自行改变外观。
此页面的一部分是“打字机”,它一个字母一个字母地写出一个文本。 这是这台打字机的代码:
function typeWriter(element, txt) {
if (txt.length > 1) {
element.textContent += txt.charAt(0);
var newText = txt.slice(1,txt.length);
setTimeout(typeWriter, 150 , element, newText);
} else {
element.textContent += txt.charAt(0);
}
}
现在我想等待打字机功能完成其文本,然后再进行另一项更改以假设我的背景颜色。
function runThis(){
var line1 = document.getElementById("line1");
typeWriter(line1, "This should be written first, before continuing");
document.body.style.backgroundColor = "blue";
}
据我了解,setTimeout 使我的打字机异步,所以如果我按照上面的示例执行此操作,则只要打字机达到第一个 setTimeout,第三行代码就会运行。
我试图通过 async/await 条款和承诺来实现这一点。但即使在我解决了承诺之后,我的“runThis”功能在打字机完成后也不会继续。
function typeWriter(element, txt) {
return new Promise (function(resolve,reject) {
if (txt.length > 1) {
element.textContent += txt.charAt(0);
var newText = txt.slice(1,txt.length);
setTimeout(typeWriter, 150, element, newText);
} else {
element.textContent += txt.charAt(0);
resolve();
}
})
}
async function runThis() {
var line1 = document.getElementById("line1");
await typeWriter(line1, "papupa");
console.log("waiting over")
document.body.style.backgroundColor = "blue";
}
你能帮我弄清楚这里出了什么问题吗? 非常感谢
【问题讨论】:
-
这是因为第一次调用
typeWriter返回的承诺永远不会被解决,你只是在解决最后一个被创建的承诺。 -
感谢您解释我哪里出错了!
标签: javascript asynchronous animation recursion