Я подписываюсь на два httprequest, которые вложены друг в друга. Моя цель - получить массив модели, заполненный объектами в первом запросе, а затем сделать второй запрос и подписать его, чтобы я мог изменить объекты из первого запроса.
Проблема заключается в том, что во втором запросе я выполняю много манипуляций с объектами, и когда я сохраняю их в хранилище, этих манипуляций нет.
private _patientListPoll$ = interval(this.listRequestInterval).pipe(
startWith(0),
map(() => this.getPatientList().subscribe(model=>{
this.model = model.map(a => Object.assign({}, a));
const linkedIds = this.model.filter(x => x.linkedUserId && x.statusId === 2).map(x => x.linkedUserId);
this.deviceDataService.getLastActivity(linkedIds).subscribe(data=>{
for (const item of data) {
let patient = this.model.find(x => x.linkedUserId === item.userId);
if (patient) {
Object.assign(patient, { lastActivity: item.lastUploadDate });
const diff = Math.abs(new Date().getTime() - new Date(patient.lastActivity).getTime());
const diffDays = Math.ceil(diff / (1000 * 3600 * 24));
if (diffDays <= 7) {
Object.assign(patient, { filterStatus: 4 });
}
let id = patient.id;
let index = this.model.findIndex(item => item.id === id)
this.model.splice(index, 1, patient)
console.log(this.model)
}
}
this.patientDataStore.savePatientData(this.model);
})
}), share()));
Любые идеи были бы великолепны ..
После большой помощи bryan60 s я понял (а)
private _patientListPoll$ = timer(0, this.listRequestInterval).pipe(
switchMap(() => this.getPatientList()),
switchMap(model => {
const linkedIds = model.filter(x => x.linkedUserId && x.statusId === 2).map(x => x.linkedUserId);
this.trialService.getPatientTrialStatusList().subscribe(data=>{
if (data) {
for (const item of data.result) {
for (const patient of model) {
if (item.id === patient.id) {
Object.assign(patient, {trialStatusId: item.state});
console.log(patient)
break;
}
}
}
}
})
return this.deviceDataService.getLastActivity(linkedIds).pipe(
map(data => {
for (const item of data) {
let patient = model.find(x => x.linkedUserId === item.userId);
if (patient) {
Object.assign(patient, {lastActivity: item.lastUploadDate});
const diff = Math.abs(new Date().getTime() - new Date(patient.lastActivity).getTime());
const diffDays = Math.ceil(diff / (1000 * 3600 * 24));
if (diffDays <= 7) {
Object.assign(patient, {filterStatus: 4});
}
let id = patient.id;
let index = model.findIndex(item => item.id === id);
model.splice(index, 1, patient);
}
}
return model;
})
);
}),
tap(model => {
this.patientDataStore.savePatientData(model);
this.model = model;
}),
share());