Meteor 发布函数应该命名吗?

Should Meteor publication functions be named?

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

具体来说,我指的是教程中的 this 步骤。

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

名称 tasksPublication 在本教程后面的任何地方都没有用到。

查看文档here似乎不​​需要这个名字。
命名发布函数有什么不同吗?

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

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

(第三行有一个Arrow function

在功能上没有明显的区别,三者之间的选择主要归结为品味。

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

例如,假设您在写 Tasks 时输入错误,改为写 Waffles

// File: server/index.js

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

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

Exception from sub tasks id egG3xJuLTLFvH4jLT ReferenceError: Waffles is not defined
at Subscription.publishAllTasks [as _handler] (server/index.js:4:10)
(some boring stuff)

第二种情况的堆栈跟踪:

Exception from sub tasks id u4rKBFH78uTBEoys2 ReferenceError: Waffles is not defined
at Subscription._handler (server/index.js:4:10)
(more boring stuff)

在第一种情况下,函数名称很清楚。
文件名和行仍然出现在行尾。

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


因此,除非您有特定的日志抓取需求,否则请不要费心去选择您喜欢的那个。