异步编程
- JavaScript 回调函数容易引起回调地狱
setTimeout(
() => {
console.log(1);
setTimeout(
() => {
console.log(2);
setTimeout(
() => {
console.log(3);
},
1000
);
},
1000
);
},
1000
);
- 后来有了 Promise,可以将回调函数以 then 的方式链式调用。
var run = steps =>
() =>
new Promise((resolve, reject) => {
setTimeout(
() => {
console.log(steps);
resolve(); // 一秒后的未来执行成功,需要调用
},
1000
);
});
Promise.resolve()
.then(run(1))
.then(run(2))
.then(run(3));
- 后来有了 async...await... 之后,代码看起来像是同步执行的一样。
async runAll() {
await run(1);
await run(2);
await run(3);
}
- Promise 通过给原始代码添加函数包装的方式实现了这里的“定义、传递、但不执行”的要求。
- 聪明的程序员总在努力地创造各种工具,去改善代码异步调用的表达能力,但是越是深入,就越能发现,最自然的表达,似乎来自于纯粹的同步代码。大道至简。
- JavaScript 生成器的原理:本质上来说,生成器将一个完整的方法执行通过 yield 拆分成了多个部分,并且每个部分都可以有输入输出,整个过程就是一个简单的状态机。它和其它函数一起,以反复挂起和恢复的方式一段一段地将任务完成。
- 异步错误处理
- promise 的 catch()
- async/await 的 try...catch
最后
对于前端异步这块儿,前端社区和各种书籍教程都在反复讲了,这里复习下~
网友评论