超级实用!详解Node.js中的lodash模块和async模块

news2024/10/6 15:24:28

在这里插入图片描述

文章目录

  • 7. `lodash` 模块
    • 安装 Lodash
    • 数组处理
    • 对象处理
    • 函数式编程
  • 8. `async` 模块
    • 安装 Async
    • 异步流程控制
      • 串行执行(Series)
      • 并行执行(Parallel)
      • 循环迭代(Each)
    • 控制流程和错误处理
      • 瀑布流控制(Waterfall)
      • 错误处理(Error Handling)

7. lodash 模块

一个实用工具库,提供了许多常用的函数,用于简化 JavaScript 编程。

const _ = require('lodash');

lodash 是一个流行的 JavaScript 实用工具库,提供了许多方便的函数来简化 JavaScript 编程。它提供了大量可靠且高效的工具函数,可以帮助开发者处理数组、对象、函数和其他数据类型,提供了更简洁、更强大的方法来操作和处理数据。

下面我们来详细讲解 lodash 模块的一些常用功能:

安装 Lodash

首先,我们需要通过 npm 安装 lodash 模块。

npm install lodash

安装完成后,我们可以使用 require 函数引入 lodash 模块,并创建一个 Lodash 实例。

const _ = require('lodash');

在上述代码中,我们使用 require 函数引入 lodash 模块,并将其赋值给 _ 变量。这是 lodash 的常用约定,使得我们在使用 Lodash 提供的函数时,可以更简洁地进行调用。

数组处理

Lodash 提供了很多处理数组的函数,例如对数组进行遍历、筛选、排序、去重等操作。

const numbers = [1, 2, 3, 4, 5];

// 遍历数组
_.forEach(numbers, (n) => {
  console.log(n);
});

// 筛选数组
const evens = _.filter(numbers, (n) => {
  return n % 2 === 0;
});

// 排序数组
const sortedNumbers = _.sortBy(numbers);

// 去重数组
const uniqueNumbers = _.uniq(numbers);

在上述代码中,我们使用 _.forEach 函数遍历数组 numbers,使用 _.filter 函数筛选出偶数,使用 _.sortBy 函数对数组进行排序,使用 _.uniq 函数去除重复元素。

除了上述函数之外,Lodash 还提供了很多其他有用的数组处理函数,如 mapreducesliceconcatflatten 等。

对象处理

Lodash 提供了许多处理对象的函数,可以方便地进行对象的操作和转换。

const user = {
  name: 'Alice',
  age: 25,
  email: 'alice@example.com'
};

// 查找对象属性
const name = _.get(user, 'name');

// 深拷贝对象
const cloneUser = _.cloneDeep(user);

// 合并对象
const mergedObject = _.merge(user, { role: 'admin' });

在上述代码中,我们使用 _.get 函数获取对象 user 的属性值,使用 _.cloneDeep 函数深拷贝对象 user,使用 _.merge 函数合并对象 user{ role: 'admin' }

除了上述函数之外,Lodash 还提供了很多其他有用的对象处理函数,如 pickomitmapKeysisEqual 等。

函数式编程

Lodash 还提供了一些函数式编程的功能,如函数的组合、柯里化等。

const add = (a, b) => a + b;
const multiply = (a, b) => a * b;

// 函数的组合
const addThenMultiply = _.flow([add, multiply]);
const result = addThenMultiply(2, 3);

console.log(result);  // 输出:15

// 函数的柯里化
const curriedAdd = _.curry(add);
const increment = curriedAdd(1);

console.log(increment(5));  // 输出:6

在上述代码中,我们使用 _.flow 函数将 addmultiply 函数组合成一个新的函数 addThenMultiply,然后调用 addThenMultiply(2, 3) 计算结果。另外,我们使用 _.curry 函数对 add 函数进行柯里化,实现了函数参数的部分应用。

除了上述功能之外,Lodash 还提供了许多其他的实用函数,如字符串处理、日期处理、数学运算、类型判断等。通过使用 Lodash,开发者可以更高效地处理数据和简化 JavaScript 编程。

8. async 模块

用于处理异步操作的流程控制和回调管理。

const async = require('async');

请注意,async 是一个流行的 JavaScript 库,提供了一组用于处理异步操作的函数。它是基于 Promise 的异步控制流工具,简化了异步代码的编写和管理。

下面我将详细介绍 async 模块的一些常用功能和使用方法:

安装 Async

首先,我们需要通过 npm 安装 async 模块。

npm install async

安装完成后,我们可以使用 require 函数引入 async 模块。

const async = require('async');

在上述代码中,我们使用 require 函数引入 async 模块,并将其赋值给 async 变量。

异步流程控制

async 提供了多种异步流程控制的函数,例如串行执行、并行执行、循环迭代等。

串行执行(Series)

async.series 函数用于按顺序依次执行一组异步函数,并在所有函数执行完毕后返回结果。

async.series([
  function(callback) {
    setTimeout(function() {
      callback(null, 'Task 1');
    }, 1000);
  },
  function(callback) {
    setTimeout(function() {
      callback(null, 'Task 2');
    }, 2000);
  }
], function(err, results) {
  console.log(results);  // 输出:['Task 1', 'Task 2']
});

在上述代码中,我们使用 async.series 函数按顺序执行两个异步任务,并在所有任务完成后打印结果。

并行执行(Parallel)

async.parallel 函数用于同时执行一组异步函数,并在所有函数执行完毕后返回结果。

async.parallel([
  function(callback) {
    setTimeout(function() {
      callback(null, 'Task 1');
    }, 1000);
  },
  function(callback) {
    setTimeout(function() {
      callback(null, 'Task 2');
    }, 2000);
  }
], function(err, results) {
  console.log(results);  // 输出:['Task 1', 'Task 2']
});

在上述代码中,我们使用 async.parallel 函数同时执行两个异步任务,并在所有任务完成后打印结果。

循环迭代(Each)

async.each 函数用于对集合中的每个元素进行异步操作。

const tasks = ['Task 1', 'Task 2', 'Task 3'];

async.each(tasks, function(task, callback) {
  setTimeout(function() {
    console.log(task);
    callback();
  }, 1000);
}, function(err) {
  console.log('All tasks are done.');
});

在上述代码中,我们使用 async.each 函数对数组 tasks 中的每个元素执行异步任务,并在所有任务完成后打印信息。

控制流程和错误处理

除了上述功能,async 还提供了一些用于控制流程和错误处理的函数。

瀑布流控制(Waterfall)

async.waterfall 函数用于按顺序依次执行多个函数,其中一个函数的输出作为下一个函数的输入。

async.waterfall([
  function(callback) {
    callback(null, 'Task 1', 'Result 1');
  },
  function(arg1, arg2, callback) {
    console.log(arg1, arg2);
    callback(null, 'Task 2', 'Result 2');
  },
  function(arg1, arg2, callback) {
    console.log(arg1, arg2);
    callback(null, 'Task 3', 'Result 3');
  }
], function(err, result) {
  console.log(result);  // 输出:'Task 3', 'Result 3'
});

在上述代码中,我们使用 async.waterfall 函数按顺序执行三个函数,并将前一个函数的输出传递给下一个函数。

错误处理(Error Handling)

async 提供了多种错误处理的函数,例如 async.seriesasync.parallel 等函数的回调中,第一个参数即为错误对象。

async.series([
  function(callback) {
    callback(new Error('Error in Task 1'));
  },
  function(callback) {
    callback(null, 'Task 2');
  }
], function(err, results) {
  if (err) {
    console.error(err.message);
  } else {
    console.log(results);  // 输出:['Task 2']
  }
});

在上述代码中,我们模拟了一个出现错误的情况,并在回调中处理错误信息。

除了上述介绍的功能之外,async 还提供了其他许多有用的函数,如 async.mapasync.reduceasync.retry 等,可以根据具体需求选择合适的函数来管理和处理异步操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/704266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

强化学习:策略梯度法

策略梯度法的思路 之前我们是用表格的形式来表达策略,现在我们同样可以用函数来表达策略。之前学的所有的方法都是被称为 value-based,接来下学的叫 policy-based 。接下来我们来看一下 策略梯度法的思路。之前学的的策略全都是用表格来表示的&#xff0…

win 安装 C++运行环境 - MinGW

目录 一、下载二、安装四、检查是否安装成功五、参考文章 一、下载 官网地址:https://www.mingw-w64.org/downloads/ 1.1点击【MingW-W64-builds】 1.2点击【Github】 1.3下载 如果下载太慢,可以使用GitHub Proxy 代理加速 (ghproxy.com) 二、安装 …

c++为什么支持函数重载?

前言 在c语言中,函数名是不可以重复的,在同一作用域中函数名称都是唯一的。这也使得我们的函数调用充满了种种麻烦。 而c则支持通过函数重载解决了这个问题 函数重载:是函数的一种特殊情况,C允许在同一作用域中声明几个功能类似的…

如何在Microsoft Excel中移动列的位置

若要在 Excel 中移动列,请使用 shift 键或“插入剪切单元格”。你还可以神奇地更改所有列的顺序。 一、Shift 键 要在不覆盖现有数据的情况下快速移动 Excel 中的列,请按住键盘上的 shift 键。 移动单列: 1、首先,选择一列。 2、将鼠标悬停在所选内容的边界上。此时会出…

建立本地题库

建立试题库文件json 第一步: 按标准格式保存试题到本地,文件名为.json. import json import osimage_path os.path.join(C:\\, Users, 123, PycharmProjects, pythonProject1, test01, imges, jxn_0900.png)# 准备要保存的数据 data [{"id": 1,"…

基于深度学习的高精度动物园动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度动物园动物(水牛、斑马、大象、水豚、海龟、猫、奶牛、鹿、狗、火烈鸟、长颈鹿、捷豹、袋鼠、狮子、鹦鹉、企鹅、犀牛、羊、老虎)检测识别系统可用于日常生活中或野外来检测与定位动物园动物,利用深度学…

【Java可执行命令】(五)打包部署工具 jar:深入解析应用程序打包、分发和部署工具jar ~

Java可执行命令详解之jar 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式:创建jar文件3.1.1 参数:-cf3.1.2 参数:-tf3.1.3 参数:-i3.1.4 参数:-v3.1.5 参数:-e 3.2 运行jar文件 4️⃣ 应用场景5️⃣ 注…

Qt实现电子商城系统

用Qt实现的电子商城系统: 1.功能包括: 1)管理员账户 2)用户管理 3)用户登录 4)商品管理 5)商品出售 6)软件打包 2.商品包括:程序源码、开发教程和程序讲解;也可以根据需求进行功能更改 3.试用链接 链接:https://pan.…

华硕无畏14pro设置指纹登录

正常的流程如下 打开一个文件夹,在左侧找到此电脑,点击右键,找到属性 在搜索框中搜索:设置指纹登录 找到指纹识别,左键点击即可展开,点击:添加手指 点击:开始 输入PIN(开…

Oracle Linux 迷途知返

Oracle Linux 6.9 发布了。Oracle 已经宣布发布 Oracle Linux 6 发行版的更新了。 新版本 Oracle Linux 6 Update 9,包括多个已更新的内核,以及两个新的 "Unbreakable Enterprise Kernel" 包和一个 "Red Hat Compatible Kernel" 包…

SAP 后台配置之FM基金管理篇

SAP FM基金管理后台配置及应用 1 二话不说先上后台配置,能跑通为先1.1 基础设置1.1.1 维护财务管理区1.1.2 分配财务管理区1.1.3 激活全局基金管理功能1.1.4 定义全局参数1.1.5 定义编号区间编号并分配1.1.6 创建更改层次变式1.1.3 激活科目分配元素1.1.4 设置允许空…

3 款适合您手机或平板电脑的最佳 Android 和 iOS 修复工具

让我们面对现实:技术不可能总是完美的,您的智能手机也是如此,尽管更容易爱上它。毕竟,它只是一台机器! 无论您使用的是 Android 还是 iOS 系统的智能手机或平板电脑,当您第一次带回家时,它都能…

搭建帮助中心需要用到哪些工具

随着企业的发展和客户需求的增加,为了提供更好的客户支持和服务,许多企业决定搭建帮助中心。一个完善的帮助中心可以为客户提供详细的产品信息、常见问题解答和使用指南等,帮助他们快速解决问题并提高客户满意度。在本文中,我们将…

优秀的测试工程师养成记,庸碌四年的点工,“我“要进阶了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 怎么才能成为优秀…

运动耳机哪种戴着舒服、值得推荐的五款运动耳机

在运动中享受最佳声音和舒适感受。这些耳机不仅具备防汗、抗水、稳定舒适的特点,而且还拥有出色的音质和智能功能,帮助你充分释放潜能,突破自我。无论你是专业运动员还是热爱户外活动的人,这些运动耳机将成为你的最佳伙伴&#xf…

Spring AOP 源码探索 之 链式调用中的 ExposeInvocationInterceptor拦截器作用

文章目录 ExposeInvocationInterceptor 示例代码源码分析 extendAdvisorsmakeAdvisorChainAspectJCapableIfNecessary添加扩展拦截器的调用链作用示例总结相关学习路线 JAVA资深架构师成长路线->开源框架解读->Spring框架源码解读 ExposeInvocationInterceptor 从英文名字…

【Linux系列P5】gccg++与【动静态库】的美妙邂逅

前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎!本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读:YY的《…

exe的python文件打包

【步骤01】 【在命令行中用pip工具安装Pyinstaller模块】 pip install Pyinstaller 步骤02】 【切换命令行的路径到你要打包的Python源文件的文件夹路径下】 【下面是我要打包的Python源文件(散点坐标图.py)及其文件夹路径】 【步骤03】 【执行Pyi…

js使用replace保留两位小数,正则保留小数位,输入负数和小数正则自动校验

下面是方法,支持保留自定义小数位,这里使用的是截取,没有四舍五入,我的功能需求是只有两位小数的地方可以输入负数,所以只加在了num2的代码块里,如果你们需要所有数字都进行负号校验,可以吧if (isF)判断放在…

百度智驾,与车路协同说「再见」

作者 | 魏启扬 来源 | 洞见新研社 在经历了裁员,全员停发年终奖之后,百度对智能交通事业部(ACE)的治理还在继续。 不久前,有媒体爆料称,百度已经将智能交通事业部(ACE)从原来的智能…