1

パブリケーション/サブスクリプション モデルがどのように機能するかをよりよく理解しようとしています。

具体的には、チュートリアルのこのステップを参照しています。

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

この名前tasksPublicationは、チュートリアルの後半では使用されません。

ここのドキュメントを見ると、名前は必要ないようです。
パブリケーション関数に名前を付けても違いはありますか?

4

1 に答える 1

6

パブリッシュ時に名前付き関数を使用する必要はありません。これらはすべて機能します。

Meteor.publish('tasks', function publishAllTasks() { return Tasks.find() });
Meteor.publish('tasks', function() { return Tasks.find() });
Meteor.publish('tasks', () => Tasks.find());

(3行目はアロー関数です)

機能に大きな違いはなく、3 つのうちどれを選択するかは、基本的に好みの問題です。

ただし、最初のステートメント (名前付き関数式) だけが行うことが 1 つあります。キャッチされない例外が発生すると、名前がスタック トレースに表示されます。

たとえば、書くときにタイプミスをして代わりに書くTasksとしましょう:Waffles

// File: server/index.js

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

これが最初のケースのスタック トレースです (タイムスタンプを削除しました)

サブタスク ID egG3xJuLTLFvH4jLT からの例外 ReferenceError: Waffles is not defined
at Subscription.publishAllTask ​​s [as _handler] (server/index.js:4:10)
(つまらないもの)

2 番目のケースのスタック トレース:

サブタスク ID u4rKBFH78uTBEoys2 からの例外 ReferenceError: Waffles is not defined
at Subscription._handler (server/index.js:4:10)
(もっと退屈なもの)

最初のケースでは、関数名が明確に表示されます。
ファイル名と行は、行末にまだ表示されます。

そのため、ログをクロールして、から発生した/通過したキャッチされていないすべての例外を見つけると役立つ場合がありますpublishAllTasks
ただし、ファイル名と行がまだあり、そのファイルを開くだけで問題のある関数を見つけることができるため、デバッグ時にはあまり役に立ちません。


したがって、特定のログクロールが必要でない限り、気にせず、好きな方を選んでください。

于 2016-04-16T15:16:34.667 に答える