async/await&异步编程解决方案讨论
JavaScript是一种事件驱动的脚本语言,这就决定了异步流程控制在JavaScript中不可回避的,而async/await是ECMAScript中最新的异步解决方案,在了解async/await之前,我们先回顾一下JavaScript中异步编程的发展。
1.回调Callback
回调是我们用的最多的一种异步编程方式,以错误优先的回调机制在Node.js的API里面更是体现的淋漓尽致。1
2
3
4
5const fs = require('fs')
fs.readFile('./package.json', (err, data) => {
if (err) throw err
console.log(data)
})
但是callback在有多层嵌套的情况下会形成“回调地狱”(Callback Hell),就像下面这样:1
2
3
4
5
6
7
8
9
10
11
12setTimeout(() => {
console.log(1)
setTimeout(() => {
console.log(2)
setTimeout(() => {
console.log(4)
setTimeout(() => {
console.log(5)
})
})
})
})
“回调地狱”使得程序难以阅读和维护,试想一下,我们现在想在上面的代码中间再加上第3层回调,改起来会有多么蛋疼。