async/await 是 generator 和 promise 的语法糖

    1. function co (generator) {
    2. const g = generator()
    3. function handleResult (result) {
    4. if (result.done) return // 生成器函数结束
    5. // 如果 yield 后面不是一个 Promise 对象,就把它包装成 Promise 对象
    6. if (!result.value instanceof Promise) result.value = Promise.resolve(result.value)
    7. result.value.then(data => {
    8. handleResult(g.next(data))
    9. }, error => {
    10. g.throw(error)
    11. })
    12. }
    13. handleResult(g.next())
    14. }
    15. // 使用
    16. co(main)
    17. /**
    18. 传入的一定要是一个 generator 函数
    19. */
    20. function * main () {
    21. try {
    22. const users = yield ajax('/api/users.json')
    23. console.log(users)
    24. const posts = yield ajax('/api/posts.json')
    25. console.log(posts)
    26. const urls = yield ajax('/api/urls11.json')
    27. console.log(urls)
    28. } catch (e) {
    29. console.log(e)
    30. }
    31. }