iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Node.js异步编程的callback有什么用
  • 479
分享到

Node.js异步编程的callback有什么用

2023-07-04 16:07:48 479人浏览 八月长安
摘要

本文小编为大家详细介绍“node.js异步编程的callback有什么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“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);}

上面的代码中,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("三轮面试都成功了!啊哈哈哈!");    });  });});

可以看到上面的异步流程做了三层嵌套,这还只是代码就比较简单的情况! 那么在实际应用中,每一个嵌套函数都可能非常复杂

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

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有什么用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Node.js异步编程的callback有什么用

本文链接: https://www.lsjlt.com/news/346573.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作