// 先读取 a
fs.readFile('a.txt', (a) => {
// a 读取成功后读取 b
fs.readFile('b.txt', (b) => {
// b 读取成功后读取 c
fs.readFile('c.txt'. (c) => {
console.log(a + b + c)
})
})
})
这时出现了回调嵌套,需要一层一层往里套,非常容易出错且不好维护。
同步方式写异步类似于:
function * asyncWrapper () {
const a = yield read('a.txt')
const b = yield read('b.txt')
const c = yield read('c.txt')
console.log(a + b + c)
}
// 使用形如 co 的库自动执行异步逻辑
co(asyncWrapper)
异步时常见回调函数嵌套,形如:
这时出现了回调嵌套,需要一层一层往里套,非常容易出错且不好维护。
同步方式写异步类似于:
这时候异步业务逻辑就通过正常的同步方式实现了。
同步方式写异步指得是代码的组织形式而已。使用async/await可以实现同步方式写异步,看下面代码:
f是一个异步操作,如果不使用async/await,直接同步的方式打印t,结果肯定是undefined;使用async/await之后,代码看上去形式还是同步的,但是里面是先执行异步操作f,再打印t的楼上两个答案足矣