我正在尝试更好地了解发布/订阅模型的工作原理。
具体来说,我指的是 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
的所有未捕获异常,它可能会有所帮助。
它在调试时没有多大帮助,因为您仍然有文件名和行,找到错误的函数只是打开该文件的问题。
因此,除非您有特定的日志抓取需求,否则请不要费心去选择您喜欢的任何一个。
关于javascript - Meteor 发布函数应该命名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664700/