2016-09-29 8 views
3

プロミスとオブザーバブルロジックを使用して、 "get"を使用してサーバからデータを取得しました。 それは昨日まで働いていた。それだけで、上記のエラーがスローされます。 どうすればわかりましたか。 "一般的なタイプ 'プロミスには1つのタイプの引数が必要です"というエラーが発生しています。エラーTS2314:汎用タイプ 'Promise <T>'には1つのタイプ引数が必要です

@Injectable() 
export class myBlogService{ 

    // Property to hold root server URL i.e host 
    private serverUrl:string = "app/data.json" 

    constructor(private http:Http) {} 

    // check function in service to check control is coming to service 
    check(){ 
    alert("getting clicked from service"); 
    } 

    // get function to get data from server 
    // basically blog datas 
    get(): Promise { 
    return this.http.get(this.serverUrl) 
       .map(response => response.json()) 
    } 
} 


/** 
* 
* My Components 
* 
*/ 
@Component({ 
    selector: 'my-app', 
    providers: [myBlogService], 
    styleUrls: ['app/css/app.css'], 
    template: ` 
    <h1 (click)= check()>My First Angular 2 App</h1> 
    <button (click)=get()>Get My Name</button> 
    <h1>{{getResponse.name}}</h1> 
    ` 
}) 
export class myBlogApp { 

    // Property to hold blog data 
    public getResponse = {"name": "", "age": ""}; 

    constructor(protected myblogservice:myBlogService){} 

    // check function to check control is going to service 
    check() { 
    this.myblogservice.check(); 
    } 

    // get function calls service get function which return data from server 
    get(){ 
    this.myblogservice.get().subscribe(data => { 
     this.getResponse = data; 
    }); 
    } 
} 


/** 
* 
* NgModule Declaration 
* 
*/ 
@NgModule({ 
    imports:  [ BrowserModule, HttpModule ], 
    declarations: [ myBlogApp ], 
    providers: [ ], 
    bootstrap: [ myBlogApp ] 
}) 
export class app{} 


/** 
* 
* App engine entry point 
* 
*/ 
const platform = platformBrowserDynamic(); 
platform.bootstrapModule(app); 

「約束は:」ときに与えられている、まだそれは のような問題を与える「エラーTS2339:プロパティ型 『約束』上には存在しません 『購読』は、」。

私は別の解決策を試みましたが、まだ運がありませんでした。あなたが特定のタイプを追加する必要が

get(): Observable<any> { 
    return this.http.get(this.serverUrl) 
       .map(response => response.json()) 
} 
+0

myBlogServiceでget関数をタイプしないとどうなりますか? – user3791775

答えて

1

代わりに置き換え、Observableを使用するPromise試みを使用します。

はデータを含んでいませんし、決意/拒否機能、使用のために純粋に使用されている場合:あなたが使用できるように

Promise<void> 

は最終的に、これは、他のどのようなタイプの署名です:

Promise<any> 

https://basarat.gitbooks.io/typescript/content/docs/promise.html

+1

PromiseをObservableに置き換えた後にこのエラーが発生する。 **エラーTS2304:名前 'Observable'を見つけることができません。**問題は以下のnode_modulesを組み込んだ後でも保持されます:: 'import 'rxjs/Rx'; 'rxjs/add/operator/map'をインポートします。 'rxjs/observable'をインポートします。 インポート 'rx'; ' – Jyotirmay

+0

'インポート' rxjs/add/operator/map '; 'rxjs/observable'から{Observable}をインポートします;これは私のために働きます。ご協力いただきありがとうございます。 @ulou – Jyotirmay

5

get(): Promise { 
    return this.http.get(this.serverUrl) 
       .map(response => response.json()) 
} 

関連する問題