温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • 编程语言 > 
  • Node.js异步编程中的callback怎么用

Node.js异步编程中的callback怎么用

发布时间:2022-04-01 10:44:16 来源:亿速云 阅读:196 作者:iii 栏目: 编程语言

这篇文章主要介绍“Node.js异步编程中的callback怎么用”,在日常操作中,相信很多人在Node.js异步编程中的callback怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node.js异步编程中的callback怎么用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

异步编程案例一

function interview(callback) {
  setTimeout(() => {
    callback("success");
  }, 1000);
}

interview(function (res) {
  if (res === "success") {
    console.log("============我笑了");
  }
});

回调函数格式规范

  • error-first callbak

  • Node-style callback

  • 第一个参数是 error,后面的参数才是结果

为什么第一个参数是 error

function interview(callback) {
  setTimeout(() => {
    if (Math.random() < 0.3) {
      callback("success");
    }
    throw new Error("fail");
  }, 1000);
}

try {
  interview(function (res) {
    if (res === "success") {
      console.log("============我笑了");
    }
  });
} catch (error) {
  console.log("fail", error);
}

Node.js异步编程中的callback怎么用

上面的代码中,try catch并不能捕获 throw new Error('fail') 抛出的错误!,而是抛出到了 JS 全局! 在 Node.js 中,全局错误时非常严重的事情,会造成程序的崩溃!

为什么没 try catch 无法捕获 setTimeout 里面的 throw 呢? 这就跟调用栈 和 事件循环有关系了!

每一个事件循环都是一个全新的调用栈! setTimeout 与 interview 是两个不同的事件循环!

但是可以通过在回调函数中的参数抛出错误的方式来解决这个问题

function interview(callback) {
  setTimeout(() => {
    if (Math.random() < 0.3) {
      callback(null, "success");
    } else {
      callback(new Error("fail"));
    }
  }, 1000);
}

interview(function (error) {
  if (error) {
    return console.log("============我哭了");
  }
  console.log("============我笑了");
});

上面的代码中,可以根据参数的类型来判断是否出错! 但是 Node.js 中有很对回调函数, 我们不可能在每一个函数中都去判断参数类型是是否出错!

Node.js 规定第一个参数就是 erro,第二个参数就是结果!如果第一个参数不为空,则说明异步调用出错了!

异步流程控制的问题

回调地狱

多个异步任务串行的情况, 下面我们模拟一下 N 轮面试,

function interview(callback) {
  setTimeout(() => {
    if (Math.random() < 0.6) {
      callback(null, "success");
    } else {
      callback(new Error("fail"));
    }
  }, 1000);
}

interview(function (error) {
  if (error) {
    return console.log("======第一轮面试======我哭了");
  }

  interview(function (error) {
    if (error) {
      return console.log("====第二轮面试========我哭了");
    }

    interview(function (error) {
      if (error) {
        return console.log("====第三轮面试========我哭了");
      }

      console.log("三轮面试都成功了!啊哈哈哈!");
    });
  });
});

可以看到上面的异步流程做了三层嵌套,这还只是代码就比较简单的情况! 那么在实际应用中,每一个嵌套函数都可能非常复杂,这就造成难以开发和维护,看着让人生气,这就是所谓的** 回调地狱**

a

多个个异步任务并发的情况

function interviewCompay() {
  let count = 0;
  interview(function (error) {
    if (error) {
      return console.log("====第一家公司面试========我哭了");
    }
    count++;
  });
  interview(function (error) {
    if (error) {
      return console.log("====第二家公司面试========我哭了");
    }
    count++;
    if (count === 2) {
      return console.log("两家公司面试都成功了!我笑了");
    }
  });
}
interviewCompay();

在每一个异步任务里面都需要加入同一个变量才能捕获 多个异步任务的结果

到此,关于“Node.js异步编程中的callback怎么用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节
推荐阅读:
  1. CallBack函数回调怎么用
  2. PHP中preg_replace_callback()函数有什么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

node.js callback
  • 上一篇新闻:
    node.js怎么支持多用户web终端
  • 下一篇新闻:
    Node.js+express怎么实现上传大文件

猜你喜欢

  • 便宜vps香港主机租用怎么提高安全性
  • 韩国视频服务器租用多少钱
  • 韩国视频服务器租用怎么选择配置
  • 日本免费主机空间有多大
  • 香港高防dns云解析有哪些特点
  • 美国gpu云服务器怎么样
  • cn2游戏服务器租用有哪些好处
  • shell判断文件大小的方法是什么
  • 国内不限带宽vps怎么租用
  • 国外免费ssl证书怎么申请
最新资讯
  • iconv在RESTful API中的编码处理
  • 字符编码标准化iconv的自动化工具介绍
  • iconv与UTF-8编码的最佳实践分享
  • PHP iconv在PDF文档处理中的编码问题
  • 字符编码兼容性iconv的兼容测试框架
  • iconv在Web服务器配置中的编码应用
  • 字符编码转换iconv的性能瓶颈分析
  • PHP iconv对GBK编码的特殊处理
  • iconv在跨域请求中的编码处理技巧
  • 字符编码统一iconv与配置文件的整合
相关推荐
  • Moq中带ref参数方法的Callback怎么用
  • Hibernate Callback怎么使用
  • Callback有什么用
  • Node.js中怎么实现异步编程
  • Node.js异步编程中的callback有什么作用
  • Node.js中的异步编程的示例分析
  • web中Promise.resolve().then(callback)比setTimeout(callback,0)更快的原因是什么
  • jQuery中动画完成后Callback函数怎么用
  • node.js中的EventEmitter怎么用
  • jquery中callback方法如何用

相关标签

js文件 spreadjs nodejs autojs d3js json_encode js轮播图 jsch nuxt.js $.getjson nodejs开发 json_decode() json_encode() Egg.js knockoutjs print.js ajaxupload.js json模块 jstorm qrcode.js
AI

玻璃钢生产厂家商丘卡通玻璃钢雕塑公司玻璃钢雕塑如何翻模成青铜玻璃钢走狮子雕塑图片江苏大型商场创意商业美陈传播铜陵玻璃钢雕塑市场鸡西雕塑玻璃钢卡通台湾玻璃钢青椒雕塑北京中庭商场美陈报价玻璃钢雕塑定制流水天壶惠州玻璃钢雕塑摆件系列北京环保玻璃钢雕塑定做价格深圳玻璃钢雕塑凳子吉林玻璃钢人物雕塑报价吉林方形玻璃钢花盆广州水果玻璃钢雕塑设计玻璃钢彩绘雕塑电话芜湖步行街玻璃钢雕塑玻璃钢能做雕塑吗仿铜玻璃钢雕塑价位凤泉玻璃钢雕塑定制商场美陈整改方案武威广场玻璃钢雕塑厂家芒市玻璃钢雕塑设计报价玻璃钢雕塑骨架襄城玻璃钢雕塑加工厂家山西高质量玻璃钢雕塑市场梅州玻璃钢人物雕塑生产厂家平洲历史玻璃钢人物雕塑郑州镂空玻璃钢人物雕塑报价平凉玻璃钢动物雕塑定制香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化