订阅仅在首次初始化后返回空数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了订阅仅在首次初始化后返回空数组相关的知识,希望对你有一定的参考价值。

我有一个数组的订阅,应该在触发事件时重置,但是当事件被触发时,我的composent不是因为数组是空的。

我的代码看起来像这样

ngOnInit() 
    this.listUnstagedFilesSubscription = this.rightPanelService.listUnstagedFilesSubject.subscribe(
      (listUnstagedFiles: any) => 
        this.listUnstagedFiles = listUnstagedFiles;
        this.setUnstageTree(listUnstagedFiles);
      );
    this.rightPanelService.emitListUnstagedFilesSubject();
  

setUnstageTree将使用'listUnstagedFiles'来填充另一个数组,然后用于显示我的组件。

问题是我不知道为什么它不起作用,因为组件总是在触发事件之前工作,如果我通过在某处调用函数ngOnInit()强制组件重新加载,它会再次起作用

这是调用订阅的代码

import  Injectable  from '@angular/core';
import  Subject  from 'rxjs';

@Injectable()
export class RightPanelService 
  isView: Boolean;
  isViewSubject = new Subject<Boolean>();
  listUnstagedFiles: any[];
  listUnstagedFilesSubject: Subject<any[]>;
  listStagedFiles: any[];
  listStagedFilesSubject: Subject<any[]>;
  commitHash: String;
  commitHashSubject: Subject<String>;

  constructor() 
    this.commitHashSubject = new Subject<String>();
    this.isViewSubject = new Subject<Boolean>();
    this.isView = true;
    this.emitIsViewSubject();
    this.listUnstagedFilesSubject = new Subject<any[]>();
    this.listStagedFilesSubject = new Subject<any[]>();
  

  emitIsViewSubject() 
    this.isViewSubject.next(this.isView);
  

  emitListUnstagedFilesSubject() 
    this.listUnstagedFilesSubject.next(this.listUnstagedFiles);
  

  emitListStagedFilesSubject() 
    this.listStagedFilesSubject.next(this.listStagedFiles);
  

  setView(view: boolean) 
    this.isView = view;
    this.emitIsViewSubject();
  

  setListFileCommit(listUnstagedFiles: any[], listStagedFiles: any[]) 
    this.listUnstagedFiles = listUnstagedFiles;
    this.listStagedFiles = listStagedFiles;
    this.emitListUnstagedFilesSubject();
    this.emitListStagedFilesSubject();
  

  emitCommitHashSubject() 
    this.commitHashSubject.next(this.commitHash);
  


  setCommitHash(hash: String) 
    this.commitHash = hash;
    this.emitCommitHashSubject();
  


答案

我找到了自己的问题的答案,我没有等待异步函数,我的变量没有设置为生成我的数组

以上是关于订阅仅在首次初始化后返回空数组的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow:GPU 加速仅在首次运行后发生

Bootstrap,选择选项占位符仅在首次提交后显示

StreamBuilder ListView 在首次加载时从 Firestore 返回空列表

应用内购买仅在首次应用启动时失败

C++11 指针空类型 - nullptr

Foundation 兜风仅在首次加载问题时启动