2016-12-19 2 views
3

YouTubeでMax SchwarzmuellerのAngular2チュー​​トリアルで取り上げたコードの例を次に示します:https://www.youtube.com/playlist?list=PL55RiY5tL51olfU2IEqr455EYLkrhmh3nObservableのPromise.resolveにはどのようなものがありますか?

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にemthenをもう一度発行して、すべてのオブザーバーにもう一度そのことを伝えるようにします。

ここでは、プロミスと類似したものは何ですか?ここで解決しますか? RxJS observablesのドキュメンテーションは、沢山あります。

これは単なる馬鹿馬鹿しいアイデアである場合や、より良い方法がある場合は、私にお知らせください。それはCONTACTSを放出さ後

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

観測可能で

+0

*「CONTACTSオブジェクトは静的JSONです。」*いいえ、そうではありません。 JSONは、データ交換のための*テキスト表記*です。 [(もっと)](http://stackoverflow.com/a/2904181/157247)JavaScriptのソースコードを扱い、*文字列*を扱っていない場合は、JSONを扱っていません。 –

+0

私は、ローカルのjsファイルから配列として取得され、REST APIではないことを意味していたと思います。それを言うには何が良い方法でしょうか? – BBaysinger

+1

どこから来ても問題ありません。それは単なる配列です。 –

答えて

5

が完了します。

も限り私の元の質問が行くように動作するコードを機能している以下のhttp://paqmind.com/posts/rxjs-error-and-completed-events-demystified/

+0

「プロパティ」が「タイプ」に存在しませんObservable '" – BBaysinger

+0

http://stackoverflow.com/questions/40579452/import-of-for-observable-in-typescript –

+1

これはうまくいきました。最初は間違っていただけです。 – BBaysinger

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); 
    } 

} 
関連する問題