angular4 http RxJS Observable observer演示

angular4 http RxJS Observable observer

Observable 可观察对象(观察者们), Observer 观察者; json

Observable就像快递公司, Observer是快递小哥, 那生产者, 消费者呢? 他们直接喊快递公司就行啦缓存

首先学会 Http 类的用法

  1. 组件中 引入 Httpangular4

// 引入模块
import { Http } from "@angular/http";
// 注入
@Injectable()
export class ApiService {
  constructor(public http: Http){}
  1. 使用方法, 经过 angular http 返回的就是一个 Observable函数

this.http
      //map 操做符返回一个新的 Observable 对象
      .map((r, err) => { return r })
      //filter 操做符执行过滤操做,而后又返回一个新的 Observable 对象
      .filter(r => r.length >= 2)
      // 抖动时间
      .debounceTime(1000)
      //subscribe 操做符, 启动订阅
      .subscribe( //订阅
        r => {
          // r 接收订阅成功后返回的数据
        },
        err => {
          // 错误时的数据
        })
      // 错误处理
      .catch(err=>{})

好吧, 这个我知道, 怎么本身建立一个呢?

// 建立一个观察者
const myserver = (observer) => {
  // 返回数据
  observer.next('data')
  // 返回错误
  observer.error()
  // 结束
  observer.complete()
  // 关闭
  observer.closed()
}

// 创建可观察对象 Observable
const obs = new Observable(myserver)
// 订阅
obs.subscribe(r =>{ console.log(r)})

下面的 myhttp 函数演示了从一个 Get 请求获取 json 并缓存下来的例子,this

let mydata
myhttp(): Observable<any> {
  if (mydata) {
    // 将缓存的数据 mydata 以 Observable 返回
    return new Observable((server: Observer<any>) => {
      server.next(mydata)
      server.complete()
    })
  } else {
    // 经过 Angular Http 获取数据
    return this.http.get('data.json')
    .map(r => {
      // 写入本地 mydata
      mydata = r
      return r
    })
  }
}
相关文章
相关标签/搜索