什么类似于Obiseable的Promise.resolve?

时间:2016-12-19 07:40:56

标签: rxjs observable

以下是我在YouTube上为Max Schwarzmueller撰写的Angular2教程选择的一些代码示例:https://www.youtube.com/playlist?list=PL55RiY5tL51olfU2IEqr455EYLkrhmh3n

import {Injectable} from "angular2/core";
import {CONTACTS} from "./mock-contact";

@Injectable()

export class ContactService {

    getContacts() {
        return Promise.resolve(CONTACTS);
    }

    insertContact(contact: Contact) {
        Promise.resolve(CONTACTS)
            .then(
                (contacts: Contact[]) => contacts.push(contact)
            );
    }

}

在此示例中,CONTACTS对象是静态JSON。这里没有必要承诺,但用于显示现实世界中服务的使用。

我非常了解它,但我正在尝试将这个想法转移到我正在使用可观察而不是承诺的服务中。

我想对CONTACTS数组进行更改,然后让Observable再次发出。然后再告诉所有观察者再次做他们的事情。

在一个可观察的东西上,这里有什么类似于Promise.resolve的东西? RxJS observables的文档需要大量工作。

如果这只是一个愚蠢的想法,或者有更好的方法,请告诉我。

2 个答案:

答案 0 :(得分:5)

getContacts() {
  return Observable.of(CONTACTS);
}

observable将在发出CONTACTS后完成。

另见http://paqmind.com/posts/rxjs-error-and-completed-events-demystified/

答案 1 :(得分:1)

以下是功能代码,就我原来的问题而言。我已从CONTACTS替换了JSON格式的数组,其中包含从本地JSON文件中提取的数据,而且我处理的是产品而不是联系人。

import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Product } from './product';
import { Observable } from 'rxjs/Rx';

@Injectable()

export class ProductsService {

    private _productsUrl = "./products.json";    
    private _productObservable: Observable<Product[]>;
    private _products: Product[];

    constructor(private _http: Http) {

    }

    getProducts() : Observable<Product[]> {

        this._productObservable = this._http.get(this._productsUrl)

            .map((response:Response) => {

                if (this._products == null) 
                {
                    this._products = response.json();
                }
                return this._products;

            })
            .catch((error:any) => Observable.throw(error || 'Server error'));


        return this._productObservable;

    }

    deleteProduct()
    {
        this._products.pop();

        return Observable.of(this._products);
    }

}