专栏首页木子昭的博客将CallBack改写成Promise

将CallBack改写成Promise

CallBack回调函数是js的特色之一, 但CallBack回调方法, 非常容易造成回调地狱(callback hell), 回调地狱不仅形象丑陋,而且代码难以维护

  • 以nodejs读取文件为例
const fs = require("fs");

// 回调函数的方式
fs.readFile('./zhaoolee.txt', (err, data)=>{
  if (err) {
    console.log(err);
  }else{
    let result = data.toString("utf8");
    
    console.log("CallBack方式读到的内容为==>>", result);
  }
})

啥是回调函数?

  • 我们可以把回调函数看做是快递小哥(回调函数=快递小哥)
  • 互联网看做是遍布全球的快递系统(互联网=快递系统)
  • 网页数据看做是快递包裹(网页数据=快递包裹)

某天购物狂欢节, 你买了200件, 200件快递来自全国各地, 发往你在深圳的家, 为了节省快递成本, 快递小哥会等待200件快递全部到达网点后, 再开着小车一起送货

  • 把上面的送货策略抽象一下, 200件快递全部到达网点是事件A, 开着小车一起送货是事件B, 只有当事件A(200件快递全部到达网点)达成时, 才会进行事件B(开着小车一起送货), 事件B(开着小车一起送货)就是事件A(200件快递全部到达网点)的回调函数

用Promise改写上面的CallBack代码

const fs = require("fs");

// Promise的方式
async function myReadFile (){
  let result = await new Promise((resolve, reject)=>{
    fs.readFile('./zhaoolee.txt', (err, data)=>{
      resolve(data.toString("utf8"))
    })
  })

  console.log("Promise方式读到的内容为==>", result);
}

myReadFile();

上面?代码出现了await和async两个词,

  • await是等待这一步完成后, 获得结果, 才能执行下一步
  • async用于修饰函数, 如果函数内部出现了await关键词,函数前面必须添加async, 这是语法~

执行结果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PDF转Word 用谷歌文档进行在线OCR识别

    博主最近被人问到了这个问题, 也做了一番研究, 最终找到两个靠谱的方法, 分享一下

    zhaoolee
  • 一行python 生成终端二维码

    zhaoolee
  • 3行代码发邮件(含发送图片)

    最近有发邮件的需求 发现了一个python发邮件的开源项目yagmail, 3行代码搞定邮件, 很赞 以下三行代码实现的功能 发送超链接 发送图片资源(支持...

    zhaoolee
  • hadoop fs 命令使用

    大数据工程师-公子
  • 利用python修改json文件的val

        做工程时遇到需要监听json文件,根据json文件中的key-value值作出相应处理的情形。为此写了修改json文件的python脚本供工程后续调用。

    用户2398817
  • 【STM32H7教程】第7章 STM32H7下载和调试方法(IAR8)

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980

    armfly
  • Scalaz(36)- Free :实践-Free In Action - 实用体验

    在上面几期讨论中我们连续介绍了Free Monad。因为FP是纯函数编程,也既是纯函数的组合集成,要求把纯代码和副作用代码可以分离开来。Free Monad...

    用户1150956
  • [基础] MySQL5.6的密码存放方式

    selectuser,host,password from mysql.user where user = 'rpl';

    二狗不要跑
  • Go-指针、传值与传引用、垃圾回收

    要点 Go使用的*、&、new()这些运算符,和C++的用法完全一样。 有传值和传引用/传地址的概念,和C++一样。 Go没有new对应的delete操作,而是...

    李海彬
  • 如何画好架构图

    本文作者阿里巴巴技术专家三画,分享了自己和团队在画好架构图方面的理念和经验,首发于阿里内部技术分享平台,阿里巴巴中间件授权转载,梓敬、鹏升和余乐对此文亦有贡献。

    程序猿DD

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动