用于服务器端数据初始化的Meteor Angular forkjoin

时间:2018-02-08 11:28:43

标签: typescript meteor rxjs observable angular-meteor

我正在尝试使用RxJS Observable.forkjoin方法来同步我的服务器端创建的假数据,但如果我尝试将它们与MeteorObservable.Collection<any>.insert方法一起使用,它就不会触发订阅。

如果我尝试使用与“原始”角度Observable相同的observableBatchTest.push(Observable.from([i]));,那么就没有问题,订阅会被触发。

以下是现有问题的一个小例子:

function initFakeChats(numberOfChats: number): Observable<{}[]> {

 let observableBatch = [];

  for (var i = 0; i < numberOfChats; i++) {
    var data = {
      messages: Fake.word(),
      name: Fake.word(),
    };
    observableBatch.push(Chats.insert(data));
  }
  return Observable.forkJoin(observableBatch);
}

export function fakeAll() {

  let chatIds = initFakeChats(2).subscribe(
    fakeChatIds => {
      console.dir('Finished Fake Chats');
      console.dir(fakeChatIds);
      return fakeChatIds;
    },
    error => {
      console.dir(error);
    });
}

是否有特殊的流星方式来达到类似的东西?例如动态嵌套Meteor.call

1 个答案:

答案 0 :(得分:1)

我现在知道问题 - 与此主题相关https://github.com/Urigo/meteor-rxjs/issues/25

MeteorObservable订阅永远不会触发一个完整的事件 - 因为这样就不可能触发forkjoin(需要完成所有内部可观察事件的触发)。

combineLatest的工作方式 - 我现在只需要进行锻炼以获得“完成”之类的识别(可以使用假对象循环的数组大小来检查订阅回调是否已“完成”),在运行下一个假创建任务之前。