可观察到的Concat

时间:2018-12-18 07:17:47

标签: typescript rxjs rxjs6

我有一个返回对象数组的方法

我需要按照一定的标准对其进行过滤,然后创建一个新的对象数组,将数据转换为另一个模型

然后返回结果数组,然后订阅

public getTestWithPare(): Observable<Array<TestModel>> {

    return this.http.getTests().pipe(
        flatMap(rate => rate), // splitting array
        filter(test => !test.isDone),
        map(test => {

            const testPare = new TestModel();
            testPare.key = `${test.id}/${test.name}`;
            if (test.type === 'new') {
                testPare.finish = test.value;
                testPare.show = true;
            } else {
                testPare.start = test.value;
                testPare.hide = true;
            }

            return testPare;
        }),
        concatAll(),
        toArray()
    );
}

调用该方法后,出现错误:

  

您提供了一个无效的对象,该对象应在其中流。您可以   提供一个Observable,Promise,Array或Iterable。

我不明白哪里出了问题

我想在输出端得到一个对象数组

大约采用以下格式:['key': {key: '1 / t', finish: 7, show: true}, ...]

1 个答案:

答案 0 :(得分:1)

Rxjs在这里过大(仅当您有大数组并且您不想一次性处理它时),用户数组方法

const testToTestPare = test => {
  /* If you don't need TestMode, create an empty object const testPare = {} */
  const testPare = new TestModel(); 
  testPare.key = `${test.id}/${test.name}`;
  if (test.type === 'new') {
    testPare.finish = test.value;
    testPare.show = true;
  } else {
    testPare.start = test.value;
    testPare.hide = true;
  }
  return testPare;
};


public getTestWithPare(): Observable<Array<TestModel>> {
    return this.http.getTests().pipe(
        map(tests => tests.map(testToTestPare)),
    );
}