Ради обучения я пытаюсь сохранить поток после, например, форк-джоина. Но я хотел бы сделать это с трубкой (элегантно). Не просто восстановить массив, а затем переписать из (массив) .subscribe, снова.
Я пытался сделать изнутри внутри трубы, но это не сработало. Также я хотел бы знать (в качестве бонусных вопросов), что было бы идеальным способом в трубе (в первом случае в данном случае, потому что я полагаю, что будет 2 трубы), чтобы изменить каждый результат вызова mock_post ДО массива forkJoin возвращается
Просто небольшая фиктивная функция, созданная мной для имитации возвращаемого значения API через 2 с.
private mock_post(url: string): Observable<object> {
return from(timer(2000)).pipe(
map(result => {
return {id: 2, name: 'mock', source: url};
})
);
}
Первый тестовый пример с ForkJoin (с использованием вышеуказанной функции)
const operations = [];
operations.push(this.mock_post('/api/test/'));
operations.push(this.mock_post('/api/test/2'));
operations.push(this.mock_post('/api/test/3'));
forkJoin(operations).pipe(
)
.subscribe(
(next) => {
console.log(next);
}
);
Второй контрольный пример с concatAll () + toArray ().
const obs: Observable<any> = from(operations);
obs.pipe(
map(result => {
// I want to modify the result here, and add something to the object or modify a property (for example)
console.log(`result-> `, result); // This is(obviously, returning an observable, but how do I get the final value here?)
result.name = 'mock_modified';
return result;
}),
concatAll(),
toArray()
).subscribe(
(next) => {
console.log(`-> NEXT`, next);
},
(error) => {
console.log(`* ERROR`, error);
},
() => {
console.log('=) COMPLETE');
}
);
Если бы кто-нибудь мог пролить немного света здесь, было бы здорово. Надеюсь, я все правильно объяснил.