Typescript 角度6 rxjs可观察到下一步时不报警()

Typescript 角度6 rxjs可观察到下一步时不报警(),typescript,observable,angular6,rxjs6,Typescript,Observable,Angular6,Rxjs6,我用typescript为我的游戏建立了一个加载系统。我有一些层:游戏>场景>元素>精灵>加载事件的html图像。所有的等待都是通过可观察的 首先,我有一个带有多个html图像的精灵,所以我有一个加载函数 public load(): Observable<boolean> { this.loadingObs = new Observable((observer) => { const layerNames = Object.keys(this.conf

我用typescript为我的游戏建立了一个加载系统。我有一些层:游戏>场景>元素>精灵>加载事件的html图像。所有的等待都是通过可观察的

首先,我有一个带有多个html图像的精灵,所以我有一个加载函数

  public load(): Observable<boolean> {
    this.loadingObs = new Observable((observer) => {
      const layerNames = Object.keys(this.conf.layers);
      let nLayer: number = 0;
      layerNames.forEach((k) => {
        this.loadImage(k).subscribe((loadResult) => {
          if (loadResult) {
            nLayer++;
          }

          if (nLayer === layerNames.length) {
            this.loaded = true;
            observer.next(true);
            observer.complete();
          }
        });
      });
    });

    return this.loadingObs;
  }
public load():可观察{
this.loadingObs=新的可观察对象((观察者)=>{
const layerNames=Object.keys(this.conf.layers);
设nLayer:number=0;
layerNames.forEach((k)=>{
this.loadImage(k).subscribe((loadResult)=>{
如果(加载结果){
nLayer++;
}
if(nLayer==layerNames.length){
this.loaded=true;
观察者:下一个(正确);
observer.complete();
}
});
});
});
返回此.loadingObs;
}
以及一种检索可观测数据的方法

  public getLoadingObs(): Observable<boolean> {
    return this.loadingObs;
  }
public getLoadingObs():可观察{
返回此.loadingObs;
}
其思想是:如果有N个元素想要加载相同的精灵,我为我的图像加载事件创建一个可观察的,存储可观察的,并为下一个想要它的元素提供可观察的。因此,当图像加载完成时,所有元素都会通过可观察订阅接收“通知”。它起作用了

关于游戏>场景>元素>精灵,一切都是关于机械师的

  public load(): Observable<boolean> {
    return new Observable((observer) => {
      let nRefs = 0;
      const spriteRefs = this.getSpritesRefs();

      // Load all needed sprites
      spriteRefs.forEach((ref) => {
        this.resources.loadSprite(ref).subscribe((loadFinished) => {
          if (loadFinished) {
            nRefs++;
          }

          if (nRefs === spriteRefs.length) {
            this.afterLoadInit();

            observer.next(true);
            observer.complete();
          }
        });
      });
    });
  }
public load():可观察{
返回新的可观察对象((观察者)=>{
设nRefs=0;
const spriteRefs=this.getSpritesRefs();
//加载所有需要的精灵
spriteRefs.forEach((ref)=>{
this.resources.loadSprite(ref.subscribe)(loadFinished)=>{
如果(加载完成){
nRefs++;
}
if(nRefs==spriteRefs.length){
this.afterLoadInit();
观察者:下一个(正确);
observer.complete();
}
});
});
});
}
我的loadSprite服务函数从sprite获取新的可观察对象,或者像前面解释的那样检索它。但我只会在创建和订阅时收到通知,而不会在检索和订阅时收到通知。(它正好起作用)

所以图像加载是可以的,通过所有层可以观察到的一些信息可以很好地交流,但不是全部。所以,如果我等待26个加载状态,我会收到5个(5个实际加载),那么为什么突然发现next()函数不会像以前那样扩展到所有订户

我迷路了,我不知道更容易调试observable的工具或技术。我尝试了tap/do方法,但没有成功。和console.log是异步的混合原因


提前感谢您的帮助或建议

解决方案是使用eventEmitter而不是observable。广播问题建议更多