Node学习记录-until实用工具

来源:Nodejs 第十八章(util)
util 是Node.js内部提供的很多实用或者工具类型的API

util.promisify

用于将遵循Node回调风格(即最后一个参数为回调函数)的函数转换成返回Promise的函数,这样可以使得异步代码更容易使用和维护
常规获取node版本

const {exec} = require('child_process')
exec('node -v', (err, stdout, stderr) => {if (err) {console.error(`执行出错:${err}`);return;}console.log(`stdout: ${stdout}`);console.error(`stderr: ${stderr}`);
})

promise风格获取,Promiseify 接受 original一个函数体

const util = require('util');
const {exec} = require('child_process');
const execPromise = util.promisify(exec)
execPromise('node -v').then(res =>{console.log('res', res)
}).catch(err =>{console.log('err', err)
})

在这里插入图片描述

promisify实现原理

1、promisify返回一个新的函数
2、接收一个函数,作为参数,并在返回的函数中接收真正的参数,然后返回一个promise
3、调用真正的函数,并将参数透传给original,如果失败了就reject,如果成功就resolve

util.callbackify(original)

将promise类型的API转回成回调函数形式

const util = require('util')
const fn = (type) =>{if(type == 1){return Promise.resolve('test')}return Promise.reject('error')
}
const callback= util.callbackify(fn)
callback(1, (err, val) =>{console.log(err,val)
})

在这里插入图片描述

const util = require('util')
const fn = (type) =>{if(type == 1){return Promise.resolve('test')}return Promise.reject('error')
}
const callback= util.callbackify(fn)
callback(1122, (err, val) =>{console.log(err,val)
})

在这里插入图片描述

callbackify实现原理

1、接收原始函数,callbackify接受一个返回promise的函数作为参数
2、创建一个新函数:这个新函数会接收与原始函数相同的参数,但会在最后多一个回调函数(node的回调风格)
3、处理promise的结果
如果Promise成功(resolved),则调用回调函数并传递null作为第一个参数,表示没有错误,以及Promise的结果作为第二个 参数
如果Promise失败(rejected), 则调用回调函数并传递错误对象作为第一个参数,第二个参数为undefined

function callbackify(originalFunction){return function(...args){// 获取最后一个参数作为回调函数const callback = args.pop();if(typeof callback !== 'function'){throw new TypeError('The last argument must be a function')}// 调用原始函数,并获取promiseconst promise = originalFunction.apply(this, args)if(!(promise instanceof Promise)){return callback(new TypeError('The function must return a Promise'))}// 处理promise结果promise.then(result =>{// promise成功,调用回调函数并传递null和结果callback(null, result)}, error =>{// promise失败,调用回调函数并传递错误callback(error)}) }
}
// 使用
const fn = (type) => {if (type === 1) {return Promise.resolve('test');}return Promise.reject('error');};const callback = callbackify(fn);callback(1, (err, val) => {console.log(err, val); // 输出: null 'test'});callback(2, (err, val) => {console.log(err, val); // 输出: 'error' undefined});

util.format()

使用第一个参数作为类似printf的格式字符串(可包含零个或多个格式说明符)来返回格式化的字符串,每个说明符都替换为来自相应参数的转换后的值,如果说明符没有相应的参数,则不会替换它
格式字符串是由%引导的,用来控制字符串输出的格式
支持的说明符有:
%s: String 将用于转换除 BigInt、Object 和 -0 之外的所有值。 BigInt 值将用 n 表示,没有用户定义的 toString 函数的对象使用具有选项 { depth: 0, colors: false, compact: 3 } 的 util.inspect() 进行检查

%d: Number将用于转换除BigInt和Symbol之外的所有值

%i: parseInt(value, 10)用于除BigInt和Symbol之外的所有值

%f: parseFloat(value) 用于除 Symbol 之外的所有值

%j: JSON.如果参数包含循环引用,则替换为字符串 ‘[Circular]’

%o: Object。具有通用 JavaScript 对象格式的对象的字符串表示形式。类似于具有选项 { showHidden: true, showProxy: true } 的 util.inspect()。这将显示完整的对象,包括不可枚举的属性和代理

%O: Object。具有通用 JavaScript 对象格式的对象的字符串表示形式。类似于没有选项的 util.inspect()。这将显示完整的对象,但不包括不可枚举的属性和代理。

%c:CSS。此说明符被忽略,将跳过任何传入的 CSS

%%:单个百分号 (‘%’)。这不消费参数。

const util = require('util');
//说明符没有相应的参数,则不会替换它
console.log(util.format('%s:%s', 11));//11:%s
//参数多于说明符的数量,则额外的参数将以空格分隔串联到返回的字符串
console.log(util.format('%s:%s', 'foo', 'bar', 'baz'));//foo:bar baz

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

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

相关文章

Vue生命周期

Vue生命周期:Vue实例从创建到销毁的过程,即指从创建、初始化数据、编译模板、挂载DOM到渲染、更新到渲染、销毁等一系列过程。主要分为创建前后、载入前后、更新前后、销毁前后以及一些特殊场景的生命周期。 …

注意力机制的目的:理解语义;编码器嵌入高纬空间计算;注意力得分“得到S*V”;解码器掩码和交叉注意力层用于训练;最终的编码器和输出实现大模型

目录 注意力机制的目的:理解语义中的它是小白兔 词编码器嵌入高纬空间 计算注意力得分“得到S*V” 权重QKV:连接权重 训练阶段使用解码器:翻译后的语句 解码器掩码和交叉注意力层用于训练 最终的编码器和输出实现大模型 Transformer模型中,QKV QKV的作用 举例说明…

鸿蒙5.0时代:原生鸿蒙应用市场引领开发者服务新篇章

前言 10月22日原生鸿蒙之夜发布会宣布HarmonyOS NEXT正式发布,首个版本号:鸿蒙5.0。这次“纯血鸿蒙”脱离了底层安卓架构成为纯国产的独立系统,仅凭这一点就有很多想象空间。 目前鸿蒙生态设备已超10亿,原生鸿蒙操作系统在中国市…

联动香港、成都、武汉三所高校!“2024 深圳国际金融科技大赛”校园行圆满结束

在金融科技蓬勃发展的当下,人才培养成为推动行业前行的关键。为推进深圳市金融科技人才高地建设,向高校学子提供一个展示自身知识、能力和创意的平台,2024 FinTechathon 深圳国际金融科技大赛——西丽湖金融科技大学生挑战赛重磅开启&#xf…

【真题笔记】16年系统架构设计师要点总结

【真题笔记】16年系统架构设计师要点总结 存储部件接口嵌入式处理器产品配置配置管理用户文档系统文档CMM(能力成熟度模型)螺旋模型敏捷软件开发的方法学软件工具面向对象的分析模型设计模型COP(面向构件的编程)构件原子构件模块S…

【力扣打卡系列】二分查找(红蓝染色法)

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day8 在排序数组中查找元素的第一个和最后一个位置 题目描述解题思路 二分查找 注意勿漏循环&#xff0c;条件为left < right注意比较的是nums[mid]与target的值&#xff0c;不是mid注意if s…

NGINX 交叉编译 arm32

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

openstack之guardian介绍与实例创建过程

运行特征 采集模块&#xff1a;扩展Ceilometer&#xff0c;采集存储网、业务网连通性、nova目录是否可读写&#xff1b; 收集模块&#xff1a;将采集到的数据存储到数据库中&#xff1b; 分析模块&#xff1a;根据采集的结果&#xff0c;分析各节点状态&#xff0c;并进行反向检…

操作集成、数据集成、界面集成-系统架构师(八十八)

1软件开发环境由软件工具集和环境集成机制构成&#xff0c;前者支持软件活动的过程和任务&#xff0c;后者提供统一数据模式和数据接口规范的数据集成机制&#xff0c;支持个各开发活动之间通信、切换、调度和协同的&#xff08;&#xff09;。 A 操作集成机制 B 控制集成机制…

项目经理必看:PMP证书值不值得考?一文了解真相!

大部分人对“PMP证书”这个词语可能有点陌生&#xff0c;但很多想从事于项目管理或带团队当领导的人对此还是比较熟悉的。 PMP是由美国项目管理协会发起的&#xff0c;严格评估项目管理人员知识技能是否具有高品质的资格认证考试&#xff0c;1999年由我国国家外国专家局引进&am…

空元组同一空间,空列表不是同一空间print(a is b, c is d)

1. 在Python&#xff08;Python的官方实现&#xff09;中&#xff0c;对于小整数有一个整数缓存机制&#xff1a; - 整数对象在 -5到256&#xff08;包含 -5和256&#xff09;之间是被缓存的。这意味着在这个范围内的整数&#xff0c;当你在代码中多次使用相同的值创建整数对象…

电通旗下VeryStar连摘Campaign 亚太科技MVP及鼎革奖两项大奖

近日&#xff0c;电通CXM&#xff08;客户体验管理&#xff09;旗下费芮互动VeryStar开发的OmniRetail零售数字化平台及其中的OmniCRM分别摘得重磅奖项。OmniCRM在Campaign亚太2024年度亚太地区Tech MVP中当选“最有价值科技产品”&#xff0c;OmniRetail荣获“2024「鼎革奖」数…

【vba源码】禁用复制功能Ctrl+C

hi&#xff0c;大家好呀&#xff01; 又到了和大家一起来分享Access开发的功能点时间了&#xff0c;最近总感觉时间不够用&#xff0c;感觉要做的事情有很多&#xff0c;但总是被乱七八糟的事情给打扰&#xff0c;好在我们每个人有Passion&#xff01;最近更新的Access2024的教…

「C/C++」C++11 之<thread>多线程编程

✨博客主页何曾参静谧的博客📌文章专栏「C/C++」C/C++程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明目…

JUC从实战到源码:LockSupport

LockSupport学习与使用 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0c;欢迎指正&…

Linux之信号量

前言 IPC中介绍过信号量, 为了让进程间通信, 从而多个执行流看到同一份公共资源, 对于并发访问造成数据不一致问题, 就需要把公共资源保护起来, 从而就需要同步与互斥. 信号量共有三个特性: 1. 本质是一把用于描述临界资源资源的数目的计数器 2. 每一个执行流想访问公共资源内…

eval长度限制绕过

我把他的叙述写成代码&#xff0c;大概如下&#xff1a; <?php $param $_REQUEST[param]; if(strlen($param)<17 && stripos($param,eval) false && stripos($param,assert) false) {eval($param); } ?> 那么这个代码怎么拿到webshell&#xf…

Linux - 进程间通信(管道)

文章目录 一、进程间通信的目的二、进程间通信的本质三、管道1、介绍2、匿名管道3、命名管道 一、进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或…

【软考】反规范化技术

论反规范化技术 反规范化有这几种技术&#xff0c;增加冗余列&#xff0c;增加派生列&#xff0c;重组表和分割表。其中冗余列是指同一个字段在另外的表中存储一份&#xff0c;减少连表操作。增加派生列是基于另外一个列或者多个列&#xff0c;计算得到一个新的列&#xff0c;可…

SpringBoot day 1104

ok了家人们这周学习SpringBoot的使用&#xff0c;和深入了解&#xff0c;letgo 一.SpringBoot简介 1.1 设计初衷 目前我们开发的过程当中&#xff0c;一般采用一个单体应用的开发采用 SSM 等框架进行开发&#xff0c;并在 开发的过程当中使用了大量的 xml 等配置文件&#x…