应该命名Meteor发布功能吗?

eva*_*n54 1 javascript publish-subscribe meteor meteor-publications

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

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

if (Meteor.isServer) {
  Meteor.publish('tasks', function tasksPublication() {
    return Tasks.find();
  });
}
Run Code Online (Sandbox Code Playgroud)

tasksPublication教程之后的任何地方都不会使用该名称.

查看此处的文档,似乎不需要该名称.
命名出版函数会有什么不同吗?

Kyl*_*yll 6

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

Meteor.publish('tasks', function publishAllTasks() { return Tasks.find() });
Meteor.publish('tasks', function() { return Tasks.find() });
Meteor.publish('tasks', () => Tasks.find());
Run Code Online (Sandbox Code Playgroud)

(第三行具有箭头功能)

功能上没有任何原始差异,并且在三者之间进行选择主要归结为品味.

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

例如,假设您在编写Tasks和写入时输入错误Waffles:

// File: server/index.js

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

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

子任务的异常id egG3xJuLTLFvH4jLT ReferenceError:
Subscription.publishAllTask​​s [as _handler](server/index.js:4:10)中没有定义Waffles
(一些无聊的东西)

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

子任务的异常id u4rKBFH78uTBEoys2 ReferenceError:
Subscription._handler(server/index.js:4:10)中没有定义Waffles
(更无聊的东西)

在第一种情况下,功能名称清晰显示.
文件名和行仍显示在该行的末尾.

因此,如果您浏览日志以查找源自/传递的所有未捕获的异常,则可能会有所帮助publishAllTasks.
调试时没有多大帮助,因为你仍然有文件名和行,找到错误的功能只是打开那个文件的问题.


因此,除非您有特定的日志爬行需求,否则请不要费心去寻找您喜欢的任何一个.