可观察:如果前面有map(),为什么结果不会出现subscribe()成功函数?

时间:2016-11-09 11:17:04

标签: angular typescript rxjs observable

我指的是post这对理解Observables非常有帮助,但仍有一些我无法获得的东西。

在它refers to的plunker中,我更改了" src / myfreinds.ts"看一下发生了什么,并添加了一些控制台日志:

首先我把它保持原样:

  export class FriendsList{

    result:Array<Object>; 
    constructor(http: Http) { 
      console.log("Friends are being called");
      http.get('friends.json')
        .map(response => {
            console.log("map");
            console.info(response);
            response.json(); //MISTAKE WAS HERE SHOULD HAVE HAD "return response.json()" INSTEAD AS EXPLAINED IN THE ANSWER GIVEN
          })
        .subscribe(result => {
          console.log("subscribe");
          console.info(result);
          this.result =result;
        }
      );
    }
  }

在这种情况下,我可以在日志中看到result下方subscribeundefined。但response下面的map确实包含了回复。

如果我带走map部分并保留subscribe部分,请执行以下操作:

export class FriendsList{

  result:Array<Object>; 
  constructor(http: Http) { 
    console.log("Friends are being called");
    http.get('friends.json')
      .subscribe(
        result => {
          console.log("subscribe");
          console.info(result);
          this.result =result;
        }
      );
   }
}

这一次,在控制台中,我可以看到订阅result而不是undefined的详细信息,就像我之前的情况一样。

我想了解为什么订阅,成功函数不包含每次结果是否应用map函数?

1 个答案:

答案 0 :(得分:4)

subscribe()作为result传递给前一个运算符.map()返回的内容 - return response.json()

response != undefined很可能只有response.json() == null