javascript - 在第二个 await -Async/await 之前等待第一个 await 完成
问题描述
我正在尝试使第二个功能等到第一个功能完成。在下面的示例中,我无法实现它。在探索 async/await 时,据说执行顺序是连续的。但是,这里的情况似乎并非如此。
function one() {
setTimeout(() => {
console.log('Hi')
}, 5000)
}
function two() {
setTimeout(() => {
console.log('Bye')
}, 2000)
}
async function doAll() {
await one();
await two();
}
async function demo() {
await doAll();
}
demo()
输出
Bye
Hi
在此示例中,由于函数二涉及的时间较少,'Bye'
因此在'Hi'
. 但我试图确保当第一个函数完成执行时,它应该转到第二个。
解决方案
那是因为您定义的函数在某种意义上不能被await
编辑,因为它们不返回可以解决的承诺。相反,它们立即完成/立即“解决”。
function one() {
return new Promise(resolve => {
setTimeout(() => {
console.log('Hi')
resolve();
}, 5000)
})
}
function two() {
return new Promise(resolve => {
setTimeout(() => {
console.log('Bye')
resolve();
}, 2000)
})
}
async function doAll() {
await one();
await two();
}
async function demo() {
await doAll();
}
demo()
推荐阅读
- android - 如何在从 Firestore 数据库中获取的 cardview recyclerview 上添加 onclick 侦听器
- ionic-framework - 离子发布 apk 每次构建都会增加文件大小
- jquery - 如何在不加载以前加载的帖子的情况下在新闻提要中加载更多帖子?
- ruby-on-rails - webpack编译失败时如何发送错误500?
- r - 提取匹配内容并合并它们
- javafx - 当我使用 javafx 连接到数据库时遇到问题
- javascript - JavaScript作业问题中的自定义排序
- node.js - VSCode 任务错误:/bin/bash: npm: command not found
- c++ - 从包含 unordered_maps 的 unordered_map 中提取信息
- google-analytics - 是否可以根据客户端反向 dns 过滤流量?