笔记标题 | 青训营笔记

70 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

Next.js 实战项目 | 青训营笔记

new assert.CallTracker()# 新增于: v14.2.0, v12.19.0 创建一个新的 CallTracker 对象,该对象可用于跟踪函数 被叫了特定的次数。必须调用 以进行验证。通常的模式是在process.on('exit')处理程序中调用它。tracker.verify() import assert from 'node:assert'; import process from 'node:process';

const tracker = new assert.CallTracker();

function func() {}

// callsfunc() must be called exactly 1 time before tracker.verify(). const callsfunc = tracker.calls(func, 1);

callsfunc();

// Calls tracker.verify() and verifies if all tracker.calls() functions have // been called exact times. process.on('exit', () => { tracker.verify(); });tracker.calls([fn][, exact])# 新增于: v14.2.0, v12.19.0 fn <函数> 默认值:无操作函数。 exact <数字>默认值:。1 返回:<函数>包装。fn 包装器函数应被精确调用时间。如果 调用 tracker.verify() 时函数没有被准确调用,则 tracker.verify() 将抛出一个 错误。exactexact import assert from 'node:assert';

// Creates call tracker. const tracker = new assert.CallTracker();

function func() {}

// Returns a function that wraps func() that must be called exact times // before tracker.verify(). const callsfunc = tracker.calls(func);tracker.getCalls(fn)# 新增于: v18.8.0 fn <功能>。 返回:<数组>,其中包含对跟踪函数的所有调用。 对象<对象> thisArg <对象> arguments <数组>传递给跟踪函数的参数 import assert from 'node:assert';

const tracker = new assert.CallTracker();

function func() {} const callsfunc = tracker.calls(func); callsfunc(1, 2, 3);

assert.deepStrictEqual(tracker.getCalls(callsfunc), [{ thisArg: this, arguments: [1, 2, 3 ] }]);tracker.report()# 新增于: v14.2.0, v12.19.0 返回:包含有关包装函数的信息的对象<数组> 由 tracker.calls() 返回。 对象<对象>message <字符串> actual <编号>调用函数的实际次数。 expected <编号>函数的预期次数 叫。 operator <字符串>包装的函数的名称。 stack <对象>函数的堆栈跟踪。 数组包含有关 的预期和实际调用数的信息 未按预期次数调用的函数。 import assert from 'node:assert';

// Creates call tracker. const tracker = new assert.CallTracker();

function func() {}

// Returns a function that wraps func() that must be called exact times // before tracker.verify(). const callsfunc = tracker.calls(func, 2);

// Returns an array containing information on callsfunc() tracker.report(); // [ // { // message: 'Expected the func function to be executed 2

错误处理# 如果引发任何回调,应用程序将打印堆栈跟踪 并退出。退出路径确实遵循未捕获的异常路径,但是 删除所有侦听器,从而强制进程 退出。除非应用程序运行,否则仍会调用回调 与 ,在这种情况下,堆栈跟踪将是 打印,应用程序退出,留下核心文件。AsyncHook'uncaughtException''exit'--abort-on-uncaught-exception 此错误处理行为的原因是这些回调正在运行 在对象生命周期中的潜在易失点,例如在 阶级建设和破坏。因此,认为有必要 快速降低进程,以防止意外中止 前途。如果综合分析是 执行以确保异常可以遵循正常的控制流,而无需 无意的副作用。

在回调中打印AsyncHook# 由于打印到控制台是异步操作,会导致调用回调。使用 或 回调函数中的类似异步操作将 导致无限递归。调试时一个简单的解决方案是使用 同步日志记录操作,例如 。 这将打印到文件,并且不会递归调用,因为 它是同步的。 错误处理#

如果引发任何回调,应用程序将打印堆栈跟踪 并退出。退出路径确实遵循未捕获的异常路径,但是 删除所有侦听器,从而强制进程 退出。除非应用程序运行,否则仍会调用回调 与 ,在这种情况下,堆栈跟踪将是 打印,应用程序退出,留下核心文件。AsyncHook'uncaughtException''exit'--abort-on-uncaught-exception 此错误处理行为的原因是这些回调正在运行 在对象生命周期中的潜在易失点,例如在 阶级建设和破坏。因此,认为有必要 快速降低进程,以防止意外中止 前途。如果综合分析是 执行以确保异常可以遵循正常的控制流,而无需 无意的副作用。

在回调中打印AsyncHook# 由于打印到控制台是异步操作,会导致调用回调。使用 或 回调函数中的类似异步操作将 导致无限递归。调试时一个简单的解决方案是使用 同步日志记录操作,例如 。 这将打印到文件,并且不会递归调用,因为 它是同步的。