javascript - 为什么第一个等待会被忽略?
问题描述
我想先将身体背景颜色更改为红色,然后再更改为蓝色。但它正在跳过红色。从 Colt Steele 的 The Web Developer Bootcamp 获得。
function changeBG(color, delay) {
setTimeout(() => {
document.body.style.backgroundColor = color;
}, delay);
}
async function init() {
await changeBG('red', 1000);
await changeBG('blue', 1000);
}
init();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
</head>
<body>
<script src="script.js"></script>
</body>
</html>
解决方案
你不是Promise
从changeBG
. 以下将起作用:-
function changeBG(color, delay) {
return new Promise(resolve=>{
setTimeout(() => {
document.body.style.backgroundColor = color;
resolve();
}, delay);
})
}
async function init() {
await changeBG('red', 1000);
await changeBG('blue', 1000);
}
init();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
</head>
<body>
<script src="script.js"></script>
</body>
</html>
推荐阅读
- ios - 分配的 IP 恰好相同时的网络状态更改通知
- json - Postgresql - 对匹配键求和 JSON 行
- zsh - ZSH 补全分隔符
- ruby-on-rails - 使用 cancancan gem 后无法用图像保存对象
- javascript - AJAX 回调看不到 jQuery 插件的方法
- javascript - 如何将数据与 React native 和多对多 firebase firestore 集合关系结合起来?
- angular - 在两个组件Angular 7之间共享数据
- c# - 尝试添加到数据库:集合已修改;枚举操作可能无法执行?
- java - 如何在 Java 中读取两个点运算符?
- c - 如何使用函数按字典顺序排列拆分命令行参数?