请问老师,期望按顺序执行,这样写行不通,不明白因为什么?

来源:6-1 异步编程解决方案Async Await

慕桂英0185571

2021-04-02

基于React实现的。期望输出顺序:ABCD,结果是:DABC。感觉await没起作用。
下面是源码实现:

// 组件第一次渲染完成
async componentDidMount() {
await this.getMockData(’/mock/a.json’)
await this.getMockData(’/mock/b.json’)
await this.getMockData(’/mock/c.json’)
// 期望最后执行
await setTimeout(() => {
new Promise((resolve) => {
resolve()
}).then(() => {
console.log(‘我是D’)
})
})
}
// 测试async await
getMockData(url) {
new Promise(resolve => {
axios.get(url).then(function(res){
resolve(res)
})
}).then((res) => {
console.log(res.data.name)
})
}

写回答

1回答

谢成

2021-04-04

上面的代码中,setTimeout前面的await是有问题的,setTimeout是宏任务会先执行。


下面红色框中的代码是没问题的,可以让abc按照顺序执行。

//img.mukewang.com/szimg/6069193f094c708008010600.jpg


因为我不知道你要实现的场景是什么样的,但读取完文件为什么下面还要加一个setTimeout然后再里面执行promise呢。我觉得是不是可以仔细梳理下应用场景,把setTimeout下面的操作也写成async/await形式。

1
3
谢成
回复
慕桂英0185571
意思是不是abc三个请求数据都得到后,再把这三个请求回来的数据放到图表中展示。这样的话目前abc都是await就可以实现,然后在这三个await的下面来写图表的代码就可以,应该不需要setTimeout。setTimeout是宏任务会先执行。
2021-04-06
共3条回复

JavaScript ES(6-11)全版本语法 前端都需要的基础课

前端无门槛学习,从ES6到ES11,一套课程掌握JS最新语法

1328 学习 · 296 问题

查看课程