从setTimeout Observable方法访问一个值

Sam*_*ath 5 observable rxjs typescript ionic3 angular

你能告诉我如何从async setTimeout() observable方法中访问一个值吗?我写的正常async方法如下所示.但是我们都知道它没有做我需要的.我怎么能observable在这里使用?任何指导都会非常感激.

page.ts

loader = this.loadingControllerService.dismissLoaderWhenNoInternet(loader);
Run Code Online (Sandbox Code Playgroud)

provider.ts

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

Dua*_*nnx 7

要在es6中处理异步,你有两个选择:
Promise:用于函数只返回一次:

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

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

可观察:用于函数返回不止一次:

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
Run Code Online (Sandbox Code Playgroud)

详细了解PromiseObservable之间的差异

  • 如果你想在1秒后打印"Hi"并想要一个`rxjs`解决方案,你可以使用`timer()`:`Observable.timer(1000).mapTo('Hi').subscribe(x => console. log(x));`或`delay()`:`Observable.of('Hi').delay(1000).subscribe(x => console.log(x));`. (2认同)