首页 > 其他分享 >js - callback()回调函数

js - callback()回调函数

时间:2023-09-15 11:14:42浏览次数:33  
标签:function 异步 函数 err 代码 js callback 回调

1、回调函数的定义和概念

回调函数是一种特殊的函数,它作为参数传递给另一个函数,并在被调用函数执行完毕后被调用。
即:函数a的参数为函数b,当函数a执行完之后再去执行b
作用:回调函数通常用于事件处理、异步编程和处理各种操作系统和框架的API

2、代码展示

function a(callback) {      
   console.log("执行函数a!");   
   console.log("调用回调函数");   
   callback(); // 调用回调函数
}

function b(){ console.log("回调函数b"); }   

function c() { console.log("回调函数c"); }   
  
function execute(){ a(b); a(c); }

execute();
  • 提问:为什么不直接把整个事情在函数a中写好,而是要通过一个参数进行回调呢?
  • 回答:如果你直接写进去,function a(){...;b();},那就直接写死了,失去了变量的灵活性。当你要传入别的函数时,需要重新写一遍函数a

3、为什么需要回调

  • JavaScript 在浏览器中运行,浏览器的主进程是单线程事件循环。如果我们尝试在单线程事件循环中,执行长时间运行的操作,则会阻止该过程。
  • JavaScript 是按从上到下的顺序运行代码。在有些情况下,必须在某些情况发生之后,代码才能运行,这就不是按顺序运行了。这是异步编程。
  • 回调函数确保:函数在某个任务完成之前不运行,在任务完成之后立即运行。它帮助我们编写异步 JavaScript 代码,避免问题和错误。
  • 在 JavaScript 里创建回调函数的方法是:将它作为参数传递给另一个函数,然后当某个任务完成之后,立即调用它。

4、回调函数的作用和使用场景

回调函数是一种常见的编程技术,它可以在异步操作完成后调用一个预定义的函数来处理结果。回调函数通常用于处理事件、执行异步操作或响应用户输入等场景。

回调函数的作用是将代码逻辑分离出来,使得代码更加模块化和可维护。使用回调函数可以避免阻塞程序的运行,提高程序的性能和效率。另外,回调函数还可以实现代码的复用,因为它们可以被多个地方调用。

回调函数的使用场景包括:

  • 事件处理:回调函数可以用于处理各种事件,例如鼠标点击、键盘输入、网络请求等。
  • 异步操作:回调函数可以用于异步操作,例如读取文件、发送邮件、下载文件等。
  • 数据处理:回调函数可以用于处理数据,例如对数组进行排序、过滤、映射等。
  • 插件开发:回调函数可以用于开发插件,例如 WordPress 插件、jQuery 插件等。
  • 回调函数是一种非常灵活和强大的编程技术,可以让我们更好地处理各种异步操作和事件。

4、Javascript 回调地狱

当多个异步函数一个接一个地执行时,会产生回调地狱。它也被称为厄运金字塔。

代码变得更加难以理解,以及难以维护和修改。这是由回调函数的嵌套而引发的。

var p_client = new Db('integration_tests_20', new Server("127.0.0.1", 27017, {}), {'pk':CustomPKFactory});
   p_client.open(function(err, p_client) {
       p_client.dropDatabase(function(err, done) {
           p_client.createCollection('test_custom_key', function(err, collection) {
               collection.insert({'a':1}, function(err, docs) {
                   collection.find({'_id':new ObjectID("aaaaaaaaaaaa")}, function(err, cursor) {
                       cursor.toArray(function(err, items) {
                           test.assertEquals(1, items.length);
 
                           // Let's close the db
                           p_client.close();
                       });
                   });
               });
           });
       });
   });

5、 如何避免回调地狱?

  • 使用promise
  • 借助 async-await
  • 使用 async.js 库

6、优点和使用场景

用一句话概括:在直接调用函数A()时,把另一个函数B()作为参数,传入函数A()里面,以此来通过函数A()间接调用函数B()。
优点

  • DRY,避免重复代码

  • 可以将通用的逻辑抽象

  • 加强代码可维护性

  • 加强代码可读性

  • 分离专职的函数

使用场景

  • 异步执行(例如读文件,发送HTTP请求)
  • 事件监听和处理
  • 设置超时和时间间隔的方法
  • 通用化:代码简洁

根据以下文章适当添加描述编写
原文地址:https://juejin.cn/post/6985748641365360648

标签:function,异步,函数,err,代码,js,callback,回调
From: https://www.cnblogs.com/axingya/p/17704484.html

相关文章

  • 详解Node.js开发中不可或缺的7个库
    详解Node.js开发中不可或缺的7个库news/2023/9/1414:26:05在Node.js开发中,选择合适的库对于提高开发效率和优化应用程序性能至关重要。本文将介绍七个备受关注的Node.js库,它们在各自的领域中展现了出色的功能和性能。这些库分别是:Config、Fetch、Ioredis、Multer、Cache......
  • nodejs+koa2+mongodb 从0到1搭建自己的项目
    nodejs+koa2+mongodb从0到1搭建自己的项目YDJFE2018-09-2811:2419207   相信这对于想要入门写nodejs的朋友来说,一定会有所收获,那么,下面开始我们的正题(这里不使用koa-generator脚手架,我们直接自己搭建项目,适用于前后端分离)一:创建项目可以在全局中安装koa依赖包......
  • @DatetimeFormat与@JsonFormat
    @DateTimeFormat(pattern=“yyyy-MM-ddHH:mm:ss”)是将String转换成Date,一般前台给后台传值时用@JsonFormat(pattern=“yyyy-MM-ddHH:mm:ss”,timezone=”GMT+8”)将Date转换成String一般后台传值给前台时......
  • 第15节课:AI框架图片识别之数据解析、Network初始化、Sigmoid激活函数及Feedforward函
    第15节课:AI框架图片识别之数据解析、Network初始化、Sigmoid激活函数及Feedforward函数详细内容请关注微信公众号:从零起步学习人工智能 https://mp.weixin.qq.com/s?__biz=MzU3OTc4OTEzNw==&mid=2247483658&idx=1&sn=3d8b40ce71e84c717428d4a1994581e0&chksm=fd618934ca1600229308......
  • 在nodejs中使用Typescript 金字教程
    1.首先新建一个项目npminit-yes2.开启Typescript依赖npminstalltypescript--save-dev安装typescript,现在我们可以通过命令行来使用tsc命令3.安装nodejs类型npminstall@types/node--save-dev4.使用命令创建一个tsconfig.json文件npxtsc--init--rootDir......
  • js 四舍五入toFixe和Math.round(
    toFixed四舍五入偶尔不正确的问题原因:因为toFixed是一个四舍六入五成双的方法四舍六入好理解,那什么叫五成双呢"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)(0.5251).toFixed(2)=>0.53......
  • mysql 字段前两位替换成其他字符 mysql字符替换函数
    一、字符串处理函数1、REPLACE()字符串替换语法:REPLACE(str,old_str,new_str);含义:将str中的old_str替换为new_str字符串。注意:当搜索要替换的文本时,MySQL使用区分大小写匹配来执行要替换的字符串搜索。示例:将"helloworld!"中hello字符串替换为hi。SELECTREPLACE('hel......
  • JSon
    json数据类型:对象、数组、字符串、数字对象:使用花括号{}括起来的表示一个对象;数组:使用中括号[]括起来的一个数组;字符串:使用常规双引号“”括起来的表示一个字符串;数字:包括整形和浮点型,直接使用。jsoncpp库用于实现json格式的序列化和反序列化序列化:是指将多个数据对象组织成......
  • Java生成Json字符串
    publicclassTest01{publicstaticvoidmain(String[]args){//StringBuilderresponseMsg=newStringBuilder();//responseMsg.append("");//responseMsg.append("");//System.out.println(responseMsg.leng......
  • 无涯教程-JavaScript - IF函数
    描述如果条件为TRUE,则IF函数返回一个值,如果条件为FALSE,则返回另一个值。语法IF(logical_test,value_if_true,[value_if_false])争论Argument描述Required/Optionallogical_testTheconditionyouwanttotest.Requiredvalue_if_trueThevaluethatyouwan......