应该命名Meteor发布功能吗?

时间:2016-04-16 13:19:50

标签: javascript meteor publish-subscribe meteor-publications

我试图更好地了解出版/订阅模式的运作方式。

具体而言,我指的是教程中的this步骤。

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

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

查看文档here,似乎不需要这个名称 命名出版函数会有什么不同吗?

1 个答案:

答案 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.publishAllTask​​s [as _handler](server / index.js:4:10)
  (有些无聊的东西)

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

  

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

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

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

因此,除非您有特定的日志抓取需求,否则请不要打扰并选择您喜欢的任何内容。