我来自Angular1,并且喜欢链接许诺,我希望具有类似的行为。

我在某类中有一种方法:-

{.........
      doLogin (username, password) {
            .......
            .......
            return this.http.get(api).subscribe(
                    data => {.....}, //enters here
                    err => {.....}
        }

然后我叫这个方法:-
 someclass.doLogin(username, password).subscribe(
           data => { }, //Not getting called
            err => { }
 }

正如我在上面的代码的注释中提到的那样,在调用者类中未调用订阅。

关于如何执行此操作的任何建议?

最佳答案

实际上,您返回了subscribe方法的对象。这是订阅,不是可观察的。因此,您将无法(再次)订阅返回的对象。

Observable允许基于可观察的运算符构建数据流链。这取决于您想做什么。

如果仅触发某些操作或从服务中设置服务属性,则可以使用do运算符和catch一个进行错误处理:

doLogin (username, password) {
  .......
  .......
  return this.http.get(api).do(data => {
    .....
    // Call something imperatively
  })
  .catch(err => {
    .....
    // Eventually if you want to throw the original error
    // return Observable.throw(err);
  });
}

不要忘记包括这些运算符,因为Rxjs并未将它们包括在其中:
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';

或全局(所有运营商):
import 'rxjs/Rx';

查看相关问题:
  • Angular 2, best practice to load data from a server one time and share results to components
  • Angular 2 HTTP GET with TypeScript error http.get(...).map is not a function in [null]
  • 10-01 21:22