Promise出现时 与 async 和 await 关键字出现时之间的有档空白区,这个空白区是怎嘛实现异步任务控制的?可以使用时生成器进行控制
    代码如下 与async 和 await基本一致

    1. function* task() {
    2. const d = yield 1;
    3. console.log(d)
    4. // //d : 1
    5. const resp = yield fetch("http://101.132.72.36:5100/api/local")
    6. const result = yield resp.json();
    7. console.log(result);
    8. }
    9. run(task)
    10. function run(generatorFunc) {
    11. const generator = generatorFunc();
    12. let result = generator.next(); //启动任务(开始迭代), 得到迭代数据
    13. handleResult();
    14. //对result进行处理
    15. function handleResult() {
    16. if (result.done) {
    17. return; //迭代完成,不处理
    18. }
    19. //迭代没有完成,分为两种情况
    20. //1. 迭代的数据是一个Promise
    21. //2. 迭代的数据是其他数据
    22. if (typeof result.value.then === "function") {
    23. //1. 迭代的数据是一个Promise
    24. //等待Promise完成后,再进行下一次迭代
    25. result.value.then(data => {
    26. result = generator.next(data)
    27. handleResult();
    28. })
    29. } else {
    30. //2. 迭代的数据是其他数据,直接进行下一次迭代
    31. result = generator.next(result.value)
    32. handleResult();
    33. }
    34. }
    35. }