Promise出现时 与 async 和 await 关键字出现时之间的有档空白区,这个空白区是怎嘛实现异步任务控制的?可以使用时生成器进行控制
代码如下 与async 和 await基本一致
function* task() {const d = yield 1;console.log(d)// //d : 1const resp = yield fetch("http://101.132.72.36:5100/api/local")const result = yield resp.json();console.log(result);}run(task)function run(generatorFunc) {const generator = generatorFunc();let result = generator.next(); //启动任务(开始迭代), 得到迭代数据handleResult();//对result进行处理function handleResult() {if (result.done) {return; //迭代完成,不处理}//迭代没有完成,分为两种情况//1. 迭代的数据是一个Promise//2. 迭代的数据是其他数据if (typeof result.value.then === "function") {//1. 迭代的数据是一个Promise//等待Promise完成后,再进行下一次迭代result.value.then(data => {result = generator.next(data)handleResult();})} else {//2. 迭代的数据是其他数据,直接进行下一次迭代result = generator.next(result.value)handleResult();}}}
