美文网首页面试那些事
JS实现用Generator将Promise的异步流程同步化

JS实现用Generator将Promise的异步流程同步化

作者: _静夜听雨_ | 来源:发表于2021-12-23 14:39 被阅读0次

用Generator将Promise的异步流程同步化

/**
* fn:Generator函数对象
*/
function generatorFunctionRunner(fn){
//定义分步对象
let generator = fn() //执行到第一个yield
let step = generator.next() //定义递归
function loop(stepArg,generator){
//获取本次的yield右侧的结果
let value = stepArg.value //判断结果是不是Promise对象 if(value instanceof Promise){
//如果是Promise对象就在then函数的回调中获取本次程序结果 //并且等待回调执行的时候进入下一次递归 value.then(function(promiseValue){
if(stepArg.done == false){
          loop(generator.next(promiseValue),generator)
} })
}else{ //判断程序没有执行完就将本次的结果传入下一步进入下一次递归 if(stepArg.done == false){
        loop(generator.next(stepArg.value),generator)
      }
} }
//执行动态调用
  loop(step,generator)
}
function * test(){
  var res1 = yield new Promise(function(resolve){
setTimeout(function(){ resolve('第一秒运行')
},1000) })
  console.log(res1)
  var res2 = yield new Promise(function(resolve){
setTimeout(function(){ resolve('第二秒运行')
},1000) })
  console.log(res2)
  var res3 = yield new Promise(function(resolve){
setTimeout(function(){ resolve('第三秒运行')
},1000) })
  console.log(res3)
}
generatorFunctionRunner(test)

相关文章

  • 微信小程序中使用co来处理异步流程

    co是一个基于ES6 Generator特性实现的【异步流程同步化】写法的工具库。 co需要使用Promise特性...

  • js异步编程(updating)

    js 异步编程方式: Promise,generator/yield,async/await 回掉函数 js事件监...

  • ES6的学习(下)

    promise:异步操作同步化 同步 -- 串行 简单、方便异步 -- 并行 性能高、体验好promise的是...

  • 微信小程序http请求封装

    微信小程序中request请求都是异步请求的,封装的http请求 使用promise请求将异步请求变成同步化,保存...

  • JS中的异步操作

    JS中异步编程的方法有: 回调函数 事件监听 发布/订阅 promise generator(ES6) async...

  • Generator + Promise改善异步流程

    有时我们遇到这样的情况: 只用 Promise 的话,解决方法只有把 a、b 一层层 return 下去,或者声明...

  • Promise&async await

    Promise: ES6 新增的语法,是异步问题同步化解决方案 ,同时解决了回调地狱的问题; Promise解决:...

  • ES6 Primise异步编程

    异步操作流程化的手段 #Promise处理异步操作 Promise,使异步操作变得流程化的手段之一,例如“异步A ...

  • Generator

    异步编程解决方案 Generator 函数、Promise 、回调函数、事件 Generator 函数有多种理解角...

  • ES6的异步解决方案

    前言 Promise async generator是ES6之后才被提出来的,他们都能够用来解决以前JS异步调用产...

网友评论

    本文标题:JS实现用Generator将Promise的异步流程同步化

    本文链接:https://www.haomeiwen.com/subject/jgblqrtx.html