2016-08-05 9 views
1

この関数を呼び出すと、console.log()は動作しますが、http.deleteメソッドは実行されません。observableに登録していないためです。ObservableをAngular 2にしないでhttpメソッドを呼び出す方法

フォームのボタンからこれを呼び出すので、何かを返すことは気にしないので、電話をかける方法はありますか?

deleteCompany(id) { 
     console.log('from data service: ', id); 
     this.http.delete(this.url + 'Companies/' + id + '?' + this.token).map(res => res.json()); 
    } 

編集:私はこの代わりに行ってきました 。これはこれを処理する正しい方法ですか?

import 'rxjs/add/operator/toPromise'; 
... 
return this.http.delete(this.url + 'Companies/' + id + '?' + this.token).toPromise(); 
+0

「編集:」と表示されます。また、コールバックを渡さずに 'subscribe()'を呼び出すこともできます。私はこれが意図が何であるかをより明白にすると思う。 –

答えて

4

@Gunterは、observableを使用する場合は、subscribeに電話する必要があります。

import 'rxjs/add/operator/toPromise'; 
    deleteCompany(id) { 
      console.log('from data service: ', id); 
     return this.http.delete(this.url + 'Companies/' + id + '?' + this.token).toPromise(); 
     } 

をコンポーネントにthen代わりのsubscribeを使用し、それを消費するために:(約束は怠け者ではありませんよう)あなたが返されるために何かをしたい場合は、次のようpromiseobservableを変換することができます。例:

this._yourServiceName.deleteCompany(this._id).then((data)=> console.log(data), (err) => console.log("error occured", err);); 
+0

答えをありがとう。私が理解していることを確認するために、私のコンポーネントで消費するものがあるようにレスポンスをマッピングし、次に.promiseを使用して実際にhttpコールを正しくトリガする例を示します。だから私はあなたがそれを使用していないことに気づいたので、どのようにこれに収まるのですか? – Lee

+0

あなたは正しいです。私は観察可能なものを返すのを忘れた(今編集された)。一般に、 'map'(または他の方法)を使ってデータストリームを変換します。 'map(res => res.json()'を使うと、レスポンスをここでは使用する必要のないJSONとして解析します。 'toPromise'メソッドはコンポーネントの' then'メソッドを使って解決される約束を返します。 – candidJ

1

号の観測は怠惰であり、subscribeまたはtoPromiseが呼び出される前に、何もしません。

関連する問題