请问老师,期望按顺序执行,这样写行不通,不明白因为什么?
来源: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回答
-
上面的代码中,setTimeout前面的await是有问题的,setTimeout是宏任务会先执行。
下面红色框中的代码是没问题的,可以让abc按照顺序执行。
因为我不知道你要实现的场景是什么样的,但读取完文件为什么下面还要加一个setTimeout然后再里面执行promise呢。我觉得是不是可以仔细梳理下应用场景,把setTimeout下面的操作也写成async/await形式。
132021-04-06
相似问题