web-dev-qa-db-ja.com

.subscribe()関数は何をしますか?

_Angular2_およびNodeJSを使用してAPIをコーディングしています。タスクのリストを取得して表示することになっているِ APIのサービスを実装しています。タスクサービスは次のとおりです。

_import {Injectable} from '@angular/core';
import {Http, Headers} from '@angular/http';
import 'rxjs/add/operator/map';

@Injectable()
export class TaskService{
  constructor(private http:Http){
    console.log('Task Service Initialized...');
  }
  getTasks(){
    return this.http.get('http://localhost:3000/api/tasks')
      .map(res => res.json());
  }
}
_

getTask関数(間違っている場合は修正).map()関数は応答を受け取り、値の配列にフォーマットします。タスクサービスを使用するタスクコンポーネントは次のとおりです。

_import { Component } from '@angular/core';
import {TaskService} from '../../services/task.service';

@Component({
  moduleId: module.id,
  selector: 'tasks',
  templateUrl: 'tasks.component.html',
})
export class TasksComponent  {
  constructor(private taskService:TaskService){
    this.taskService.getTasks()
      .subscribe(tasks =>{
        console.log(tasks);
    })
  }
}
_

この.subscribe()関数の機能を理解したいのですが、関連する情報が見つかりません。

16
Aria Groult

.subscribe() 関数は、jQueryPromise.then().catch()および.finally()メソッドに似ていますが、代わりにpromisesを扱う Observable sを扱います。

つまり、対象のobservable(これはgetTasks())にサブスクライブし、successfulになるまで待機してから、最初に渡されたコールバック関数を実行します。あなたの場合は:

tasks => {
    console.log(tasks);
} 

エラー(.catch()に類似)または完了(.finally()に類似)で何らかのロジックを実行する場合、次のようにそのロジックをsubscribeに渡すことができます。

observable.subscribe(
  value => somethingToDoOnlyOnSuccess(value),
  error => somethingToDoOnlyOnError(error),
  () => somethingToDoAlways()
);

より多くの例と詳細を見つけることができます here

23