Node.js 中的 promisify 和 callbackify API 提供在基于 Promise 的编程模型与基于回调的模型之间桥接的方法。
promisify 方法可将 Node.js 风格的回调函数转换为返回 Promise 的 async 函数:
import { promisify } from "node:util";
function foo(args, callback) {
try {
callback(null, 1);
} catch (err) {
// Errors are emitted to the callback via the first argument.
callback(err);
}
}
const promisifiedFoo = promisify(foo);
await promisifiedFoo(args);与 promisify 类似,callbackify 将返回 Promise 的 async 函数转换为 Node.js 风格的回调函数:
import { callbackify } from 'node:util';
async function foo(args) {
throw new Error('boom');
}
const callbackifiedFoo = callbackify(foo);
callbackifiedFoo(args, (err, value) => {
if (err) throw err;
});callbackify 和 promisify 使在回调与 Promise 之间桥接时轻松应对各种挑战。
更多信息请参阅 Node.js callbackify 文档 ↗和 Node.js promisify 文档 ↗。
util.types API 提供可靠且高效的方式来检查值是否为各种内置类型的实例。
import { types } from "node:util";
types.isAnyArrayBuffer(new ArrayBuffer()); // Returns true
types.isAnyArrayBuffer(new SharedArrayBuffer()); // Returns true
types.isArrayBufferView(new Int8Array()); // true
types.isArrayBufferView(Buffer.from("hello world")); // true
types.isArrayBufferView(new DataView(new ArrayBuffer(16))); // true
types.isArrayBufferView(new ArrayBuffer()); // false
function foo() {
types.isArgumentsObject(arguments); // Returns true
}
types.isAsyncFunction(function foo() {}); // Returns false
types.isAsyncFunction(async function foo() {}); // Returns true
// .. and so on有关 util.types 的更多信息,请参阅 Node.js util.types 文档 ↗。
util.MIMEType 提供便捷方法,便于使用和操作 MIME 类型 ↗。例如:
import { MIMEType } from "node:util";
const myMIME = new MIMEType("text/javascript;key=value");
console.log(myMIME.type);
// Prints: text
console.log(myMIME.essence);
// Prints: text/javascript
console.log(myMIME.subtype);
// Prints: javascript
console.log(String(myMIME));
// Prints: application/javascript;key=value有关 util.MIMEType 的更多信息,请参阅 Node.js util.MIMEType 文档 ↗。