У меня есть два потока. Поток A и B. Поток B зависит от потока A и, как ожидается, будет накапливать значения, излучаемые потоком A с течением времени. Я использую оператор сканирования для достижения этой цели. Однако проблема заключается в том, что всякий раз, когда поток A выдает значение, оператор сканирования в потоке B всегда начинается со значения по умолчанию, а не с ранее накопленных значений. Поэтому мой вывод всегда основан на текущем ответе, и я теряю эти значения, как только появляется новое значение.
Поток A основан на нашем пользовательском интерфейсе. У меня есть две вкладки и форма ввода, где пользователь отправляет идентификатор учетной записи. Мне нужно как имя вкладки, так и выбранный вход. Я не уверен, что мне не хватает в этом. Если у кого-то есть какие-либо предложения, это будет высоко оценено. Код указан ниже
private streamA$ = this.selectedTab$.pipe(
switchMap((tab) =>
this.accountSubmitted$.pipe(
switchMap(({ account, type }) => {
return this.myHttpService.method.pipe(
map((response) => {
return {
type,
response
};
})
);
})
)
),
share()
);
private streamB$ = this.streamA$.pipe(
map(({ type, response }) => {
const { graph } = response;
return { type, graph };
}),
scan((accResponse, currentResponse) => {
const { type, graph: linkedDetails } = currentResponse;
const { nodes: newNodes = [], edges: newEdges = [] } = linkedDetails;
if (type === 'init') {
return {
nodes: newNodes,
edges: newEdges
};
}
const { nodes: linkedNodes = [], edges: linkedEdges = [] } = accResponse;
const allNodes = [...linkedNodes, ...newNodes];
const allEdges = [...linkedEdges, ...newEdges];
return {
nodes: allNodes,
edges: allEdges
};
}, {})
);