Previamente, pregunté un problema sobre la devolución de httprequest anidada con subsolicitud de espera.
https://stackoverflow.com/questions/69308614/angular-map-wait-observable-to-complete[Angular map wait Observable to complete] 1
Le hice algunos cambios, pero arroja un error.
Error: proporcionó 'indefinido' donde se esperaba una transmisión. Puede proporcionar un Observable, Promise, Array o Iterable.
Aquí está mi código de actualización
test2(): Observable<Student[]> { return this.test1().pipe( mergeMap((result) => { if (!result) { return of(result); } return forkJoin( result.map((rr) => { if (rr.age === 1) { rr.age = rr.age * 10; return of(rr); } else { this.client .get('https://api.coindesk.com/v1/bpi/currentprice.json') .pipe( map((res) => { console.log(res); rr.age = rr.age * 10000; return rr; }) ); } }) ).pipe( map((paths) => { console.log('w'); console.log(paths); return paths; // return result.map((e, index) => ({ // age: paths[index], // })); }) ); }) ); }El problema en su código es que está utilizando una condición dentro de su .map . Si está utilizando una condición en la función .map , debe agregar return porque, como indica el error, se esperaba una transmisión en lugar de indefinida. Para que pueda proporcionar un observable, debe devolver su observable dentro de su condición if-else .
En el siguiente código, agregué la palabra clave return en su of() y en su llamada http . También creé un stackblitz que contiene mi solución para que lo verifiques.
test2(): Observable < Student[] > { return this.test1().pipe( mergeMap((result) => { if (!result) { return of(result); } return forkJoin( result.map((rr) => { if (rr.age === 1) { rr.age = rr.age * 10; return of(rr); } else { return this.client .get('https://api.coindesk.com/v1/bpi/currentprice.json') .pipe( map((res) => { console.log(res); rr.age = rr.age * 10000; return rr; }) ); } }) ).pipe( map((paths) => { console.log('w'); console.log(paths); return paths; }) ); }) ); }