async await 是 promise.then 的一种写法,他并不是阻塞线程,而ajax的同步请求是阻塞线程的。
async asyncFunction = function() {
let a = await new Promise(resolve => {
setTimeout(() => {
console.log('asyncFunction')
resolve()
}, 1000)
})
}
let fatherFunction = {
console.log('fatherFunction')
asyncFunction()
console.log('after async')
}
let main = function() {
fatherFunction()
console.log('main')
}
main()
上面的代码执行的结果是:
可以看到 asyncFunction 在 main 打印了之后才打印的,说明 asyncFunction 实际上还是一个异步的请求,他并不会阻塞 main 函数的执行。
另外我们看到 after async 在 asyncFunction 之后才打印,其实不用过多的解释,我们把 fatherFunction 和 asyncFunction 换一种写法就明白了
asyncFunction = function() {
let a = new Promise(resolve => {
setTimeout(() => {
console.log('asyncFunction')
resolve()
}, 1000)
})
}
fatherFunction() {
console.log('fatherFunction')
asyncFunction().then(() => {
console.log('after async')
})
}
因为 async await 实际上就是为了不用一直写 then(),用同步的写法让函数表达更直观,实际还是异步。