Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 调用unsubscribe时,Observable为null_Angular_Typescript_Rxjs_Rxjs5 - Fatal编程技术网

Angular 调用unsubscribe时,Observable为null

Angular 调用unsubscribe时,Observable为null,angular,typescript,rxjs,rxjs5,Angular,Typescript,Rxjs,Rxjs5,我试图返回一个可观察的,它将返回如下数据 getRootGroupNodes(): Observable<Group[]> { return Observable.create(function(observer) { var groups = [ { groupName: "Group1" }, { groupName: "Group2" } ] observer.next

我试图返回一个可观察的,它将返回如下数据

getRootGroupNodes(): Observable<Group[]> {


    return Observable.create(function(observer) {

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

        observer.complete();

    });
}

我得到了
这个。加载组订阅
null
。因此,试图调用undefined上的unsubscribe时抛出异常。知道我做错了什么吗?这应该是基本的。

的确,该变量没有在回调中赋值。我认为有两种方法可以解决这个问题:

  • 使用
    setTimeout()将取消订阅包装起来。

  • 添加
    .delay(0)
    操作符,这基本上是相同的技巧:

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

    请参见一个稍微类似的问题,并解释其工作原理:

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