心悦俱乐部官方网站怎么做任务,徐州网站建站,简约手机网站源码,wordpress如何自己编辑来源#xff1a;Nodejs 第十八章#xff08;util#xff09; util 是Node.js内部提供的很多实用或者工具类型的API
util.promisify
用于将遵循Node回调风格#xff08;即最后一个参数为回调函数#xff09;的函数转换成返回Promise的函数#xff0c;这样可以使得异步代…来源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