首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >订阅onerror绑定

订阅onerror绑定
EN

Stack Overflow用户
提问于 2017-04-30 06:12:14
回答 2查看 203关注 0票数 0

我使用angular2 2/rxjs,很难理解onerror回调对.subscribe()的有用性。但是,我看到的每个示例都只是打印到控制台上,但是,如果我想执行其他操作,比如让另一个服务处理错误,该怎么办?简单地调用this.otherservice.handleError并不能正确地绑定this。所以我需要把它叫做this.otherservice.handleError.bind(this.otherservice)。这是意料之中的还是我遗漏了什么?

代码语言:javascript
复制
@Injectable
export class OtherService {
    public foo: Subject<string>;
    constructor() {
        this.foo = new Subject<string>();
    }
    handleError(error: any) {
        this.foo.next(error);
    }
}


@Injectable
export class MyService {
    constructor(private http: Http, private otherservice: OtherService) {}
    get() {
        this.http.get('www.foo.com').subscribe(
            () => 'success',
            this.otherservice.handleError
        )
    }
}

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-30 06:19:10

基本上,当您将闭包放入订阅时,它将转换为以下形式:

代码语言:javascript
复制
observer = {
  next: onNextFn,
  error: onErrorFn,
  complete: onCompleteFn
}

所以当你说:

代码语言:javascript
复制
 .subscribe(
    () => 'success',
    this.otherservice.handleError
 )

这意味着:

代码语言:javascript
复制
{
  next: () => 'success',
  error: this.otherservice.handleError
}

所以this上下文将是observer对象。您需要绑定上下文来维护这些函数的正确上下文。

票数 2
EN

Stack Overflow用户

发布于 2017-04-30 06:17:39

您的错误方法需要一个未定义的参数。

代码语言:javascript
复制
get() {
    this.http.get('www.foo.com').subscribe(
        (data => 'success'}), 
    (error) => {
        this.otherservice.handleError
    )
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43703494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档