2017-07-28 4 views
0

Ich möchte eine Funktion erstellen, liefert eine Observable .Die Beschreibung der Funktion ist wie folgt:Wie schreibt man eine Funktion mit einem Observable?

  1. Die Funktion delayedAlert(message:string, time:number) sein sollte, dass ein Observable zurückgibt.

  2. sollte die Funktion setTimeout Funktion innerhalb delayedAlert enthalten, die message nach dem Satz druckt ‚time‘ Wert.

Ex:

delayedAlert(message, time){ 
return new Observable//how to implement setTimeout function here? 
+0

Sie können dies tun, indem Sie die Dokumentation lesen. Sehen Sie sich "Observable.create" an. Möchten Sie, dass die Funktion die Nachricht druckt, oder möchten Sie, dass die Observable einen Wert ausgibt und ein Abonnent dann die Nachricht druckt? –

+0

Ich habe das Dokument gelesen, aber konnte nicht verstehen, wie man das erfolgreich macht. Wenn Sie mir auf beide Weisen erzählen können, die zu meinem Lernen beitragen werden. – Aditya

Antwort

3

Verwenden Observable.create die beobachtbare, und in dem ersten Rückruf, schreiben die Logik zu erstellen, die beobachtbar zu füllen, die in Ihrem Fall ist die setTimeout.

function delayedAlert(msg, time) { 
    return Observable.create(
    observer => setTimeout(() => observer.onNext(msg), time)); 
} 

Dann, es zu benutzen:

delayedAlert("Hi, Sally", 1000).subscribe(msg => alert(msg)); 

Wenn Sie jedoch Observablen verwenden, brauchen Sie nicht setTimeout zu verwenden; verwenden delay stattdessen angewendet of, die eine beobachtbare von Einzelwert schafft (e):

function delayedAlert(msg, time) { 
    return Observable.of(msg).delay(time); 
} 

Da es so einfach ist es auf diese Weise zu schreiben, werden Sie wahrscheinlich nicht brauchen, um alle delayedAlert Funktion:

const observable = Observable.of("Hi, Sally").delay(1000); 

observable.subscribe(msg => alert(msg)); 
+0

Muss ich Rxjs von 'rxjs/Rx' importieren, da es observer.onNext zeigt, ist keine Funktion. – Aditya

+0

Bitte versuchen Sie 'next'. Natürlich benötigen Sie 'import {Observable} von 'rxjs/Rx', um Zugriff auf' Observable' selbst und die statischen und Instanz-Methoden wie 'of',' create' und 'delay' zu bekommen. –

+0

Ja, es funktioniert, ich habe jetzt die Implementierung von Observables verstanden. Vielen Dank, die Leute antworteten eher auf die Frage, sie haben Zeit zu verlieren, aber keine Zeit, die Fehler zu beantworten. Vielen Dank. – Aditya

Verwandte Themen