以下是我在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的文档需要大量工作。
如果这只是一个愚蠢的想法,或者有更好的方法,请告诉我。
答案 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);
}
}