问题 .subscribe()函数有什么作用?


我正在编写API Angular2 和 NodeJS,我正在为我的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() 功能确实,我找不到任何相关信息。


6869
2018-02-02 11:20


起源

一个好的开始: reactivex.io/rxjs/manual/overview.html - Matt
它将会成为 非常 硬 不 通过最基本的网络搜索,或查看rxJS文档,或查找Angular特定用法,Angular文档以及其他地方来查找相关信息。


答案:


.subscribe() 功能类似于 .then() 功能 jQuery,而不是处理 promise它处理 Observable秒。

这意味着它将订阅自己 observable 感兴趣的(是 getTasks() 在你的情况下)并等到它 successful 然后执行传递的回调函数,在您的情况下是:

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

14
2018-02-02 12:02



因此可以这样写它:this.taskService.getTask(function(){console.log(tasks);})//我还想了解为什么我们使用tasks =>而不仅仅是console.log (任务) - Aria Groult
是的,有可能使用 function 符号,但使用的优势 arrow 符号( =>)是它保留了意义 this,看到这个 文章 - Tha'er M. Al-Ajlouni


主要优点 subscribe 与承诺相比 then  - 您可以使用通知更改 observer.next(data) 多次,您的订​​阅者将对每次更改做出反应。

new Observable(observer => observer.next(data));

因此,如果您有多个同一事件的监听器 - 每次观察者生成新数据并调用时,所有监听器都会收到更改事件 observer.next()。当您拥有可以经常更改的数据并且您希望单个且可预测的流程通知您的侦听器时,它非常有用。

诺言 then 允许您等待一次异步操作。


-3
2018-02-02 12:10