Warum würdest du jemals call () auf Observable-Funktionen aufrufen?

8

Ich bin ein relativ Anfänger in Angular, und ich habe Mühe, eine Quelle zu verstehen, die ich aus dem ng-Bootstrap-Projekt lese. Der Quellcode finden Sie hier .

Ich bin sehr verwirrt durch den Code in ngOnInit:

%Vor%

Wie lautet der Aufruf von .call(...) für diese Observable-Funktionen? Welche Art von Verhalten versucht dies zu erreichen? Ist das ein normales Muster?

Ich habe viel über Observables (kein Wortspiel beabsichtigt) als Teil meiner Angular Education gelesen / geschaut, aber ich bin noch nie auf so etwas gestoßen. Jede Erklärung würde geschätzt werden

    
CodyBugstein 04.12.2017, 04:04
quelle

3 Antworten

1

Um es zu verstehen, können Sie sich zunächst die vordefinierte JavaScript-Funktionsmethode "call" ansehen:

%Vor%

Der Grund für den Aufruf von "call" besteht darin, eine Funktion im Objekt "person" aufzurufen und den Kontext an "myObject" zu übergeben.

Ähnlich ist der Grund für das Aufrufen von "call" unten:

%Vor%

stellt den Kontext "this._valueChanges" zur Verfügung, stellt aber auch die Funktion bereit, die auf Basis dieses Kontexts aufgerufen werden kann, das ist der zweite Parameter, die anonyme Funktion

%Vor%

In dem von Ihnen verwendeten Beispiel:

  • this._valueChanges ist das beobachtbare Eingabeereignis

  • Die Funktion _do.call dient dazu, bei jeder Eingabe des Ereignisses einige Seiteneffekte zu erzielen, und gibt dann ein gespiegeltes Observable des beobachtbaren Quellobjekts zurück (das beobachtbare Ereignis)

AKTUALISIERT Beispielcode: Ссылка

Über den do Aufruf:

Sie können es auf einem Observable wie folgt aufrufen:

%Vor%

In diesem Fall müssen Sie den ersten Parameter nicht als Kontext "Observable" übergeben.

Aber wenn du es von seinem eigenen Ort aus anrufst, wie du es gesagt hast, musst du den ersten Parameter als "Observable" übergeben, den du anrufen willst. Das ist der Unterschied.

wie @Fan Cheung erwähnt, wenn du es nicht von seinem eigenen Ort aus anrufen willst, kannst du es wie folgt machen:

%Vor%     
Tinh Dang 04.12.2017, 11:20
quelle
4

Meine persönliche Meinung ist, dass sie dies für RxJS vor 5.5 verwendet haben, was mietbare Operatoren eingeführt hat. Derselbe Stil wird intern von Angular verwendet. Zum Beispiel: Ссылка .

Der Grund dafür ist, dass sie standardmäßig die Observable-Klasse mit rxjs/add/operators/XXX patchen müssen. Der Nachteil davon ist, dass einige Bibliotheken von Drittanbietern ein globales Objekt modifizieren, das unerwarteterweise irgendwo anders in Ihrer App zu Problemen führen kann. Siehe Ссылка .

Sie können am Anfang der Datei sehen, dass sie jeden Operator separat importieren Ссылка .

Sie können also mit .call() einen beliebigen Operator verwenden und trotzdem vermeiden, die Klasse Observable zu patchen.

    
martin 04.12.2017 07:57
quelle
0

Ich nehme an

%Vor%

entspricht

%Vor%

Meiner Meinung nach ist es kein übliches Muster (ich denke, es ist das gleiche Muster, aber auf unterschiedliche Weise geschrieben), um mit Observablen zu arbeiten. _do () im Code wird als eigenständige Funktion verwendet, nimmt einen Callback als Argument und muss mit dem Bereich der Quelle Observable

verknüpft werden

Ссылка

    
Fan Cheung 04.12.2017 05:01
quelle