当前位置:  开发笔记 > 编程语言 > 正文

从结果创建Observable <T>

如何解决《从结果创建Observable<T>》经验,为你挑选了2个好方法。

我正在尝试Angular2.

我注意到http服务使用Observable对象而不是Promise(我不喜欢那个选择.. async/ await正在到达).

在我的服务中,我Plants从webservice 下载了一个列表.单击工厂我使用路由显示详细信息.但是当我回去的时候,再次下载植物(因为再次调用构造函数).

为了避免这种情况,我想做类似的事情:

public getPlants(): Observable
{   
    if (this._plants != null)
        return Observable.fromResult (this._plants); //This method does not exists 

    return this._http.get('../../res/heroes.json')...
}

有没有办法做到这一点?如何Observable在ts文件中导入该类?

谢谢!



1> Patrick..:

调用TypeScript(或JavaScript中的方法)中的方法of.学习rxjs也有一个很好的教程

如果您使用的是rxjs6,那么您将获得所有内容rxjs

import { Observable, of } from 'rxjs';

public getPlants(): Observable {
  const mocked: Plant[] = [
    { id: 1, image: 'hello.png' }
  ];
  // returns an Observable that emits one value, mocked; which in this case is an array,
  // and then a complete notification
  // You can easily just add more arguments to emit a list of values instead
  return of(mocked);
}

在以前的版本中,您从其他位置导入了运算符

import { Observable } from 'rxjs/Observable';
import { of } from 'rxjs/observable/of';

public getPlants(): Observable {
  const mocked: Plant[] = [
    { id: 1, image: 'hello.png' }
  ];
  return of(mocked);
}

在此之前,您将其作为Observable类的扩展名导入

import { Observable } from "rxjs/Observable";
import 'rxjs/add/observable/of';

public getPlants(): Observable {
    // this can be changed to a member variable of course
    let mocked: Plants[] = [{
        id: 1,
        image: "hello.png"
    }];
    return Observable.of(mocked);
}


我发现我还需要添加`import'rxjs/add/observable/of';`.
如果您不想逐个添加所有运算符,也可以从'rxjs/Rx'`导入.

2> user3471528..:

这是我的工作解决方案:

if (this._heroes != null && this._heroes !== undefined) {
    return Observable.create(observer => {
        observer.next(this._heroes);
        observer.complete();
    });
}

我希望这是最好的解决方案.


这是[订阅者](https://github.com/ReactiveX/rxjs/blob/master/src/Subscriber.ts).参见[Observable.create()](http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-create)和[new Observable()](http:// reactivex .io/rxjs/class/es6/Observable.js~Observable.html#instance-constructor-constructor)文档.
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有