为何要使用generator函数和promise?

  • js的异步地狱一直是困扰前端程序员的一个头疼的问题

比如说我要获取还有列表,一般来说会使用ajax来获取

$.ajax(...等等,function(res){
// res代表获取的本人信息
$.ajax(....等等,function(res){
//在本人信息的基础之上获取我的好友名字
$.ajax(....等等,function(res){
//根据我的好友名字获取我的好友的基本信息等等... })
})
})
  • 从上面的代码可以看出来,异步虽然是一个很好的方式,但是过多的嵌套会带来很严重的问题,并且性能不是很高

第一版本解决方式

  • 使用promise和await/async配合
function getTime(){
return new Promise((resolve,reject){
setTimeout(()=>{
resolve('这是一秒之后')
},1000)
})
}

第二版本解决方式

  • 配合await/async使用
async function test(){
//在这里面就可以像同步代码一样书写异步函数
//并且不会出现js异步地狱的问题
const result = await getTime()
return result;
}
test() //开始执行
  • 使用then的方式
getTime().then(res=>{
console.log(res) //会返回resovle的结果
}).catch(error=>{
console.log(error) //打印错误的情况下
})

虽然说这个代码已经很实用,很好看了,但是如果有更好的方式可以解决多个异步函数的问题,让他循环执行,岂不是完美

  • 那么就看接下来的

终极版

function* add(num){
const r1 = yield getPromise(num)
yield getPromise(r1)
}
function getPromise(num){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
var count = num * num
console.log(count)
resolve(count)
},1000)
})
}
var r2 = add(2);
r2.next().value.then(res=>{
console.log(r2.next(res))
})

看的出来,没有减少代码甚至增加了代码量

  • 主要是由于generator本身并不是一个单独使用的函数,一般会配合很多库来使用

如果用过redux-saga的人一定不会陌生了

分享不易,希望可以留下小星星-

generator和promise配合解决js异步地狱问题的更多相关文章

  1. promise 的基本概念 和如何解决js中的异步编程问题 对 promis 的 then all ctch 的分析 和 await async 的理解

    * promise承诺 * 解决js中异步编程的问题 * * 异步-同步 * 阻塞-无阻塞 * * 同步和异步的区别? 异步;同步 指的是被请求者 解析:被请求者(该事情的处理者)在处理完事情的时候的 ...

  2. 学习 Promise,掌握未来世界 JS 异步编程基础

    其实想写 Promise 的使用已经很长时间了.一个是在实际编码的过程中经常用到,一个是确实有时候小伙伴们在使用时也会遇到一些问题.Promise 也确实是 ES6 中 对于写 JS 的方式,有着真正 ...

  3. Promise如何解决回调地狱

    为什么要有promise:解决(回调地狱)的问题 ### 回调地狱: ```js //跟以前的if条件地狱很像 // if(){ // if(){ // if(){ // } // } //} $.g ...

  4. js异步编程

    前言 以一个煮饭的例子开始,例如有三件事,A是买菜.B是买肉.C是洗米,最终的结果是为了煮一餐饭.为了最后一餐饭,可以三件事一起做,也可以轮流做,也可能C需要最后做(等A.B做完),这三件事是相关的, ...

  5. 一个例子读懂 JS 异步编程: Callback / Promise / Generator / Async

    JS异步编程实践理解 回顾JS异步编程方法的发展,主要有以下几种方式: Callback Promise Generator Async 需求 显示购物车商品列表的页面,用户可以勾选想要删除商品(单选 ...

  6. JS异步编程 (2) - Promise、Generator、async/await

    JS异步编程 (2) - Promise.Generator.async/await 上篇文章我们讲了下JS异步编程的相关知识,比如什么是异步,为什么要使用异步编程以及在浏览器中JS如何实现异步的.最 ...

  7. 【JavaScript】 使用Async 和 Promise 完美解决回调地狱

    很久以前就学习过Async和Promise,但总是一知半解的. 今天在写NodeJS的时候,发现好多第三方库使用回调,这样在实际操作中会出现多重回调,这就是传说中的JS回调地狱. 举个例子 有一个方法 ...

  8. JS 异步与 Promise

    JS 异步与 Promise 本文写于 2020 年 6 月 8 日 1. 同步与异步与回调函数 Promise 现在是前端面试必考题呀,但是先不急着看 Promise,我们首先来看看什么是异步. - ...

  9. JS 异步系列 —— Promise 札记

    Promise 研究 Promise 的动机大体有以下几点: 对其 api 的不熟悉以及对实现机制的好奇; 很多库(比如 fetch)是基于 Promise 封装的,那么要了解这些库的前置条件得先熟悉 ...

随机推荐

  1. Swoole4-swoole创建Mysql连接池

    一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机. 解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000个 ...

  2. 【Autofac打标签模式】AutoConfiguration和Bean

    [ Autofac打标签模式]开源DI框架扩展地址: https://github.com/yuzd/Autofac.Annotation/wiki *:first-child { margin-to ...

  3. 解决Mac安装tesserocr报错问题 Failed building wheel for

    localhost:~ jerry$ Processing /var/www/git/python/tesserocr -bash: Processing: command not found loc ...

  4. App上下左右滑动封装

    #coding=utf-8 from appium import webdriver from time import sleep caps = { "platformName": ...

  5. python requests自动化框架

    一.项目结构 1.新建一个工程(一定要创建工程),工程名称自己定义,如:yoyo_jiekou 2.在工程的跟目录新建一个脚本:run_main.py,用来执行全部用例 3.在工程下创建以下几个pak ...

  6. Service Cloud 零基础(一)Case 浅谈

    本片参考:https://resources.docs.salesforce.com/222/latest/en-us/sfdc/pdf/salesforce_case_implementation_ ...

  7. 开启sql语句监控

    开启sql执行语句监控 set global general_log=on; set global_log_output='table'; 修改mysql配置文件,在[mysqld]中加入 gener ...

  8. PHP 奇葩的debug_zval_dump的输出

    有段代码: $a1 = 'Hello world!'; $a2 = &$a1; echo "test1 :"; debug_zval_dump($a1); $b1 = 'H ...

  9. 下载linux历史版本

    http://blog.csdn.net/u012453843/article/details/52819756

  10. 上传文件夹或上传文件到linux

    http://jingyan.baidu.com/article/d169e18658995a436611d8ee.html https://www.cnblogs.com/nbf-156cwl/p/ ...