众所周知 js 中遍布了各种异步的方法,大到 ajax 小到 setTimeout,为了达成让异步方法串行的目的,有以下x种方法。

1. callback

  • 使用方式:将后续执行的方法体作为参数传给前一个方法,在前一个方法的异步操作结束后,调用传入的方法体。
  • 示例: ```javascript function nextFunc() { console.log(‘callback 2’) }

function callbackFunc(func) { setTimeout(() => { console.log(‘callback 1’) func() }, 1000) }

callbackFunc(nextFunc) // callback1 callback2

  1. - 优点:简单易用,兼容性超级好
  2. - 缺点:代码侵入性大,破坏代码线性结构
  3. <a name="QTJJe"></a>
  4. ## 2. Promise.then
  5. - 使用方法:异步执行的方法返回一个 Promise 对象,当这个对象的状态扭转为 resolve reject 的时候,才会调用 .then
  6. - 示例:
  7. ```javascript
  8. function nextFunc() {
  9. console.log('callback 2')
  10. }
  11. function promiseFunc() {
  12. return new Promise((resolve, reject) => {
  13. setTimeout(() => {
  14. console.log('callback 1')
  15. resolve()
  16. }, 1000)
  17. })
  18. }
  19. promiseFunc().then(() => { nextFunc() })
  • 更详细的api与手写实现,见

「JavaScript」异步2-Promise一篇读懂

3. Generator