Я подписываюсь на наблюдаемое и использую свойство, являющееся массивом в результате, для выполнения вызовов и изменения каждого элемента в массиве и возврата окончательного результата или вывода.
Ниже приведен мой код, которыйв настоящее время не работает.Я не уверен, что я делаю неправильно.Что я должен изменить, чтобы этот код работал?
this.esService.search(JSON.stringify(query)).subscribe(response => {
let temp;
this.esResponse = response;
let result = this.esResponse.hits.hits;
return from(result).pipe(
concatMap(item =>
this.productService.getProductById(this.schemaId, item['_source']['consensusAssessmentId']).pipe(
map(resp => {
const answers = resp['answers'];
const meets_count = answers.reduce((acc, cur) => cur.value === "Meets" ? ++acc : acc, 0);
const needs_count = answers.reduce((acc, cur) => cur.value === "Needs Improvement" ? ++acc : acc, 0);
item['_source']['meets'] = meets_count.toString();
item['_source']['needs'] = needs_count.toString();
})
))
).subscribe(resp => {
temp = resp;
this.rows = temp.map(
this.esService.convertToPE
);
})
})
Этот код работает, но он неэффективен.Я предоставляю это, чтобы лучше уточнить мою цель с кодом.
this.esService.search(JSON.stringify(query)).subscribe(response => {
let temp = [];
this.esResponse = response;
let result = this.esResponse.hits.hits;
result.forEach(item => {
this.productService.getProductById(this.schemaId, item['_source']['consensusAssessmentId']).subscribe(resp => {
const answers = resp['answers'];
const meets_count = answers.reduce((acc, cur) => cur.value === "Meets" ? ++acc : acc, 0);
const needs_count = answers.reduce((acc, cur) => cur.value === "Needs Improvement" ? ++acc : acc, 0);
item['_source']['meets'] = meets_count.toString();
item['_source']['needs'] = needs_count.toString();
})
temp.push(item);
})
this.rows = temp.map(
this.esService.convertToPE
);
});