概览

第四章 - 异步编程 - 图1

异步编程难点

1. 异常处理

【现象】try catch 无法捕获异步(如回调事件)中发生的错误
【原因】try/catch只能捕获当次事件循环内的异常
【解决方案】
自行编写的异步方法须遵循以下原则:

  1. 必须执行调用者传入的回调函数
  2. 正确回传异常 ```

async(function(error, results){ if(error) return;

})

  1. <a name="aWX3k"></a>
  2. ## 2. 函数嵌套地狱
  3. 【解决方案】Promise异步转同步写法
  4. <a name="F2u2j"></a>
  5. ## 3. 阻塞代码
  6. 【背景】没有sleep函数,setTimeouut和setInterval基于事件循环机制也无法真正阻塞<br />【解决方案】
  7. 1. **Promise + setTimeout**
  8. ```jsx
  9. function sleep (ms) {
  10. return new Promise(resolve => setTimeout(resolve, ms));
  11. }
  12. // call
  13. sleep(1000).then( fn )
  1. async/await + setTimeout ```jsx function sleep (ms) { return new Promise(resolve => setTimeout(resolve, ms)); }

// call async function init () { await sleep(1000); fn(); }

```

【其他参考】