Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Método efetuaLogin

No método efetuaLogin você diz que não é possível fazer a conversão para .json após converter a resposta para uma promise, mas o código que você escreveu antes de fazer a alteração para o uso do .map funciona corretamente contanto que a url esteja no formato template string.

Minha dúvida é, essa operação pode ser feita das duas formas ou existe alguma restrição?

import { Usuario } from './usuario';
import { Http } from '@angular/http';
import { Injectable } from '@angular/core';

@Injectable()
export class usuarioService{

    constructor(private _http: Http){ }

    public efetuaLogin(email:string, senha:string){

      let api = `https://aluracar.herokuapp.com/login?email=${email}&senha=${senha}`;
        return this._http
          .get(api)
          .toPromise()
          .then(res => res.json().usuario)
          .then(dado => {
            let usuario = new Usuario(dado.nome, dado.dataNascimento, dado.email, dado.telefone);
            return usuario;
          });
    }
}
1 resposta
solução!

"No método efetuaLogin você diz que não é possível fazer a conversão para .json após converter a resposta para uma promise"

Você só pode fazer o .map em um Observable, não em uma promise, logo não poderá fazer .map em uma promise.

É possível fazer a conversão sem o map, pegando a resposta que na verdade é um objeto da Fetch API e chamando res.json() como você viu.

Você pode fazer das duas formas. Eu prefiro com map, pois isolo a lógica de conversão em uma operação anterior.