概览
异步编程难点
1. 异常处理
【现象】try catch 无法捕获异步(如回调事件)中发生的错误
【原因】try/catch只能捕获当次事件循环内的异常
【解决方案】
自行编写的异步方法须遵循以下原则:
- 必须执行调用者传入的回调函数
- 正确回传异常 ```
async(function(error, results){ if(error) return;
})
<a name="aWX3k"></a>
## 2. 函数嵌套地狱
【解决方案】Promise异步转同步写法
<a name="F2u2j"></a>
## 3. 阻塞代码
【背景】没有sleep函数,setTimeouut和setInterval基于事件循环机制也无法真正阻塞<br />【解决方案】
1. **Promise + setTimeout**
```jsx
function sleep (ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// call
sleep(1000).then( fn )
- async/await + setTimeout ```jsx function sleep (ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
// call async function init () { await sleep(1000); fn(); }
```
【其他参考】
https://blog.csdn.net/qq_36711388/article/details/89787637
4. 多线程编程
【API提供】
Node - child_process
浏览器 - Web Worker5. 异步转同步
TODO
[ ] 了解child_proccess => cluster
- 了解Web Workers