我试图更好地了解出版/订阅模式的运作方式。
具体而言,我指的是教程中的this步骤。
if (Meteor.isServer) {
Meteor.publish('tasks', function tasksPublication() {
return Tasks.find();
});
}
tasksPublication
这个名称在本教程后面的任何地方都没有使用。
查看文档here,似乎不需要这个名称 命名出版函数会有什么不同吗?
答案 0 :(得分:6)
发布时确实不需要使用命名函数,所有这些都可以工作:
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());
这是第一种情况下的堆栈跟踪(我删除了时间戳)
子任务的异常id egG3xJuLTLFvH4jLT ReferenceError:Waffles未定义
在 Subscription.publishAllTasks [as _handler](server / index.js:4:10)
(有些无聊的东西)
第二种情况下的堆栈跟踪:
子任务的异常id u4rKBFH78uTBEoys2 ReferenceError:未定义Waffles
在 Subscription._handler (server / index.js:4:10)
(更无聊的东西)
在第一种情况下,功能名称清晰显示 文件名和行仍显示在该行的末尾。
因此,当您浏览日志以查找源自/通过publishAllTasks
的所有未捕获的异常时,可能会有所帮助。
调试时它没有多大帮助,因为你仍然有文件名和行,找到错误的功能只是打开那个文件。
因此,除非您有特定的日志抓取需求,否则请不要打扰并选择您喜欢的任何内容。