Recientemente noté que puedo devolver un valor dentro .pipe() pero no dentro .subscribe() .
¿Cuál es la diferencia entre estos dos métodos?
Por ejemplo, si tengo esta función, llamémosla 'depósito', que se supone que devolverá el saldo de la cuenta, si hago esto:
deposit(account, amount){ return this.http.get('url') .subscribe(res => { return res; } }Devuelve un observable y si hago esto:
deposit(account, amount){ return this.http.get('url') .pipe( map(res => { return res; }); ); }Devuelve el saldo de la cuenta como se esperaba.
¿Entonces por qué?
El método de pipe es para encadenar operadores observables, y la subscribe es para activar el observable y escuchar los valores emitidos.
El método pipe se agregó para permitir que el paquete web elimine los operadores no utilizados del paquete final de JavaScript. Facilita la creación de archivos más pequeños.
Por ejemplo, si tengo esta función, llamémosla 'depósito', que se supone que devolverá el saldo de la cuenta, si hago esto:
deposit(account, amount){ return this.http.get('url') .subscribe(res => { return res; } }Devuelve un observable
Eso no es lo que devuelve. Devuelve el objeto Subscription creado cuando llamó a Subscribe .
y si hago esto:
deposit(account, amount){ return this.http.get('url') .pipe( map(res => { return res; }); ); }Devuelve el saldo de la cuenta como se esperaba.
Eso no es lo que devuelve. Devuelve un Observable que utiliza un operador de map . El operador del mapa en su ejemplo no hace nada.