web-dev-qa-db-ja.com

Angular .subscribeコールバックなしのhttp.post

私はちょうどhttpを作ることができるかどうか疑問に思っていますコールバックにサブスクライブせずにリクエストを投稿、このようなもの

 this._http.post('/list/items/update?itemId=' + itemId + "&done=" + done, null);

これの代わりに

 this._http.post('/list/items/update?itemId=' + itemId + "&done=" + done, null)
        .subscribe();
19
Vnuuk

できるとは思いません。

http.post(およびget、put、deleteなど)は、コールドのObservable、つまり次のObservableを返します。

基礎となるプロデューサーは、サブスクリプション中に作成およびアクティブ化されます

ソース

つまり、Observableで表される関数は、subscribe()メソッドでのみアクティブになります。

13
Picci

私は同じ質問をしましたが、私は実際に誰かがオブザーバブルにサブスクライブするかどうか気にしないことを見つけました。私はPOSTリクエストをどんな場合でも送信したいだけです。これは私が思いついたものです:

_postItem(itemData) {
    var observable = this.http.post('/api/items', itemData)
        .map(response => response.json()) // in case you care about returned json       
        .publishReplay(); // would be .publish().replay() in RxJS < v5 I guess
    observable.connect();
    return observable;
}
_

リクエストは、connect()が呼び出されるとすぐに送信されます。ただし、postItemの呼び出し元が必要に応じてサブスクライブできるという観察可能なものがまだあります。単にpublishReplay()の代わりにpublish()が使用されるため、POSTリクエストが完了した後でもサブスクライブが可能です。

8
lex82

私はPromiseへの変換を使用しています(rxjsが必要です):

import 'rxjs/add/operator/toPromise';
@Injectable()
export class SomeService {
....
  post(sp: Seatplace, date?: Date) : Promise<any> {
     return this.http.post(
       '/list/items/update?itemId=' + itemId + "&done=" + done, 
        null
     ).toPromise();
  }
}
7
2oppin