是否应命名Meteor发布函数

Should Meteor publication functions be named?

本文关键字:函数 布函数 Meteor 是否      更新时间:2023-09-26

我正在努力更好地了解发布/订阅模型的工作原理。

具体来说,我指的是教程中的这一步。

if (Meteor.isServer) {
  Meteor.publish('tasks', function tasksPublication() {
    return Tasks.find();
  });
}

名称tasksPublication在本教程后面的任何地方都不会使用。

看看这里的文档,似乎不需要这个名字
命名发布函数有什么区别吗?

发布时确实不需要使用命名函数,所有这些都可以:

Meteor.publish('tasks', function publishAllTasks() { return Tasks.find() });
Meteor.publish('tasks', function() { return Tasks.find() });
Meteor.publish('tasks', () => Tasks.find());

(第三行具有箭头功能)

在功能上没有本质上的区别,在三者之间进行选择主要取决于味道。

然而,只有第一条语句(命名函数表达式)会做一件事:当发生未捕获的异常时,名称会出现在堆栈跟踪中。

例如,假设你在写Tasks时拼写错误,而写Waffles

// File: server/index.js
Meteor.publish('tasks', function publishAllTasks() { return Waffles.find() });
// or:
Meteor.publish('tasks', () => Waffles.find());

这是第一种情况下的堆栈跟踪(我删除了时间戳)

子任务id egG3xJuLTLFvH4jLT ReferenceError出现异常:未定义华夫饼
位于Subscription.publishAllTasks[as_handler](server/index.js:4:10)
(一些无聊的东西)

第二种情况下的堆栈跟踪:

子任务id u4rKBFH78uTBEoys2 ReferenceError出现异常:未定义华夫饼
订阅_处理程序(server/index.js:4:10)
(更无聊的东西)

在第一种情况下,函数名称显示得很清楚
文件名和行仍然显示在行的末尾。

因此,如果您在日志中爬行以查找源自/通过publishAllTasks的所有未捕获异常,则可能会有所帮助
不过,在调试时,这并没有多大帮助,因为您仍然有文件名和行,而找到错误的函数只是打开该文件的问题。


所以,除非你有特定的日志抓取需求,否则不要麻烦,选择你喜欢的。