2017-07-24 22 views
2

你能告訴我如何從asyncsetTimeout()observable方法中訪問一個值嗎?我寫了如下正常的async方法。但大家都知道它沒有做我需要的東西。我怎麼在這裏使用observable?任何指導將非常感激。從setTimeout訪問值Observable方法

page.ts

loader = this.loadingControllerService.dismissLoaderWhenNoInternet(loader); 

provider.ts

dismissLoaderWhenNoInternet(loader: Loading): Loading { 
    setTimeout(() => { 
     if (loader) { 
     loader = null; 
     return loader;//not working here 
     } 
    }, 5000); 
    return loader; 
    } 

回答

3

要ES6處理異步,你有兩個選擇:
無極:使用函數只是返回一次:

asyncPromise() { 
    return new Promise((resolve, reject) => { 
     setTimeout(() => { 
     resolve("Hello"); 
     }, 2000) 
    }) 
} 

this.asyncPromise().then(data=>{console.log(data)}); //Print Hello after 2s 

可觀察:使用函數返回不止一次時間更多:

import { Observable } from 'rxjs/Observable'; 
asyncObservable() { 
    return new Observable(observer => { 
     setInterval(() => { 
     observer.next("Hi"); 
     }, 1000) 
    }) 
} 

this.asyncObservable().subscribe(data=>{console.log(data);}) //Print Hi every 1s 

查看更多有關differences between Promise and Observable

+0

對不起,這不是我need.I只需要只打印'Hi'在1秒之後,就是這樣了。我想有一個可觀察的解決方案。 – Sampath

+0

如果你想在'1s'之後打印'Hi',爲什麼不使用'Promise'。 'Promise'和'Observale'是處理'async'的兩種不同技巧,每種都有自己的目的。你應該根據你的目的來選擇技巧。但是,最終,這並不重要。如果將'setInterval'更改爲'setTimeout',則只會在'1s'後面打印'Hi'' – Duannx

+1

最好命名'observer',而不是'observable'這裏'Observable(可觀察的)' –