调用取消订阅时 Observable 为空

Observable is null when unsubscribe is called

我正在尝试 return 一个将 return 数据如下的可观察对象。

getRootGroupNodes(): Observable<Group[]> {


    return Observable.create(function(observer) {

        var groups = [
            { groupName: "Group1" },
            { groupName: "Group2" }
        ]
        observer.next(groups);

        observer.complete();

    });
}

当我尝试食用它时

   this._loadGroupsSubscription = this._apiGroupService.getRootGroupNodes()
        .retry(3)
        .subscribe(
        groups => {
            // do somethign with groups
        },
        err => { this._log.logMessage("failed to retrieve groups"); },
        () => {

            this._loadGroupsSubscription.unsubscribe();
        }
        );

我得到 this._loadGroupsSubscriptionnull。因此抛出异常试图调用未定义的取消订阅。任何想法我做错了什么?这应该是基本的..

确实没有在回调中分配变量。我认为有两种方法可以解决这个问题:

  1. setTimeout()包裹取消订阅:

    setTimeout(() => _loadGroupsSubscription.unsubscribe());
    
  2. 添加.delay(0)运算符,基本上是一样的技巧:

    var _loadGroupsSubscription = getRootGroupNodes()
      .retry(3)
      .delay(0)
      .subscribe(
        groups => {
          console.log(groups);
        },
        err => { this._log.logMessage("failed to retrieve groups"); },
        () => {
          _loadGroupsSubscription.unsubscribe();
        }
    );
    

观看现场演示:https://jsbin.com/sunicoq/2/edit?js,console

看到一个稍微类似的问题,解释这是如何工作的: