Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

164
Views
Se llama al servicio Angular 2+ http, pero la solicitud no se envía

Quiero poder instanciar una clase modelo, pero también darle acceso a los servicios.

Por ejemplo, supongamos que tengo estos puntos finales:

 /book/:id /book/:id/author

Quiero tener un servicio BooksService para obtener una lista de una instancia de Book . Me gustaría que las instancias del libro se crearan con new , dada una definición JSON a través del constructor, sin dejar de poder usar dependencias angulares.

Ejemplo de lo que quiero hacer:

 BooksService.getBook(1) // makes call to /book/1 .subscribe((book) => { book.getAuthor() // makes call to /book/1/author ... });

Para lograr esto, traté de usar una fábrica para crear una new instancia de un modelo de libro. Luego paso una referencia a la dependencia inyectada de Http que inyecta la fábrica.

Esto es lo que tengo:

LibrosServicio

 @Injectable() export class BookService { constructor( private http: Http, private bookModelFactory: BookModelFactory ) {} getBook(): Observable<BookModel> { return this.http.get('http://localhost:3000/book/1') .map((res) => { return this.bookModelFactory.make(res.json().data); }); } }

LibroModelo, BookModelFactory

 @Injectable() export class BookModelFactory { constructor (private http: Http) {} make(def: object): BookModel { var book = new BookModel(def); book.http = this.http; return book; } } export class BookModel { def: any; http: Http; constructor (def: object) { this.def = def; } getAuthor() { console.log('http', this.http); this.http.get('http://localhost:3000/book/1/author'); } }

Cuando trato de usar este código, veo el registro de la consola para el objeto http en book.getAuthor() . Existe, y puedo ver el método get en él. Pero nunca hace la solicitud de API. Nada en la pestaña de red tiene nada sobre una llamada a /book/1/author . No hay errores. En pocas palabras, no pasa nada.

¿Por qué no se realiza la solicitud cuando se llama a this.http.get('...') en getAuthors() ?

Gracias por adelantado.

Usando Angular 4.

(Las declaraciones de importación se eliminan por brevedad)

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

2) Si esta es una buena estrategia... ¿por qué no se realiza la solicitud cuando se llama a this.http.get('...') en getAuthors()?

Porque nunca nadie se suscribió a los resultados de esta convocatoria:

 this.http.get('http://localhost:3000/book/1/author').subscribe(res => { // do something with the results here });

En angular, si no se suscribe a los resultados de la llamada HTTP, esta llamada nunca se realizará.

O tal vez desee que su método getAuthor devuelva un Observable<Author> para que sea la persona que llama a este método la que pueda suscribirse a los resultados:

 getAuthor(): Observable<Author> { return this.http.get('http://localhost:3000/book/1/author').map(res => { return res.json().data; }); }

Para que puedas suscribirte más tarde:

 BooksService.getBook(1) // makes call to /book/1 .subscribe(book => { book.getAuthor() // makes call to /book/1/author .subscribe(author => { // do something with the book author here }); ... });

Así que recuerda, si no te suscribes, no se realizará la llamada AJAX.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!