javascript - Meteor 发布函数应该命名吗?

标签 javascript meteor publish-subscribe meteor-publications

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

具体来说,我指的是 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)

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

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


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

关于javascript - Meteor 发布函数应该命名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664700/

相关文章:

ruby-on-rails - Redis + ActionController::Live 线程不会死

javascript - knockout 组件更新可观察对象未被父 View 模型订阅?

javascript - jQuery javascript 未正确返回 true/false

javascript - react 警告 : Cannot update a component from inside the function body of a different component

meteor - 如何在客户端使用 Meteor.wrapAsync?

javascript - 包含函数的返回值应为 null 或模板

android - Android 上的 EventBus : how to implement dynamic queues vs. 基于类的事件订阅?

javascript - 如何使用 JavaScript 函数式编程从对象列表中找到具有最低属性的对象?

javascript - 等到 jquery 对话框返回

javascript - Meteor发布错误检测