demo代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>different way to handle async function</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
<div id="app">
<button @click="getResult">test promise</button>
<button @click="getResult2">test async</button>
</div>
<script>
new Vue({
el: '#app',
methods: {
// setTimeout模拟网络延时
getFoo() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve()
}, 5000)
})
},
getBar() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve()
}, 1000)
})
},
// 先弹窗getBarSuccess后弹窗getFooSuccess
// 即哪个请求先resolve则哪个callback先被执行
getResult() {
this.getFoo().then(res => {
alert('getFooSuccess')
})
this.getBar().then(res => {
alert('getBarSuccess')
})
},
// 总是弹窗getFooSuccess后弹窗getBarSuccess,
// 虽然barPromise早已经是resolve状态了,但是无法让他后面的alert('getBarSuccess')先执行
async getResult2() {
const fooPromise = this.getFoo()
const barPromise = this.getBar()
await fooPromise
alert('getFooSuccess')
await barPromise
alert('getBarSuccess')
}
}
})
</script>
</body>
</html>
遇到的问题是:
现在我想把getResult()
方法这种promise
调用的写法改成用ES7的async/await
的写法,希望的是有两个顺序无关的请求,哪个请求先完成,则哪个请求的callback
先被执行,但是改成用async/await
似乎做不到。
请教各位大佬支招一下,还是用async/await
在这种场景下是无法实现的呢?
在此感激不尽!
你不需要等待返回结果,你又要
await
,这是几个意思呢,不要为了await
而await
。