2017-07-28 60 views
0

我想創建一個返回函數的Observable .The描述如下功能:如何用Observable編寫函數?

  1. 的功能應該是delayedAlert(message:string, time:number)返回一個Observable

  2. 該函數應包含內部delayedAlertsetTimeout函數設定「time」值後打印message

例:

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

您可以通過閱讀文檔來完成此操作。看看'Observable.create'。您是希望打印郵件的功能,還是希望observable發出一個值,然後訂閱者會打印郵件? – 2017-07-28 05:02:07

+0

我已閱讀文檔,但無法理解如何使這一成功。如果你能告訴我這兩種方式,將增加我的學習。 – Aditya

回答

3

使用Observable.create創建觀察到的,並在第一個回調,寫來填充觀察到的,而你的情況是setTimeout邏輯。

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

然後使用它:

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

但是,如果使用的是可觀察,你並不需要使用setTimeout;使用delay而是適用於of,這就造成個別值(一個或多個)可觀察到的:

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

因爲它是那麼容易就這樣寫,你可能並不需要delayedAlert功能都:

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

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

我必須從'rxjs/Rx'導入Rxjs,因爲它顯示observer.onNext不是函數。 – Aditya

+0

請嘗試'next'。當然,你需要從'rxjs/Rx'中導入{Observable};'訪問'Observable'本身,以及''''''''''''''和'delay'等靜態和實例方法。 – 2017-07-28 05:21:08

+0

是的,它的工作原理,我現在已經理解Observables的實現。非常感謝你,人們寧願回答這個問題,他們有時間冷靜下來,但沒時間去回答這些錯誤。總之,謝謝。 – Aditya