Angular 6 / Typescript HTTP post-запрос возвращает неопределенное значение, когда служба вызывается из другой службы - PullRequest
0 голосов
/ 20 ноября 2018

Я использую Angular 6.

Я звоню в сервис (service2) getData из другого сервиса (service 1).Запрос post выполняется в service2 и выводит данные на консоль.Однако данные не возвращаются в service1, которая вызывает service2, и объект 'result' всегда неопределен.

Вызов службы (service1)

this.service.getData(id, token).then(
  result => {
    console.log("result " + result);
  },
  error => {
    console.log("error " + error);
  });

Сервис (service2)

getData(id, token): Promise < any > {
  var startTime: number = new Date().getTime();

  return new Promise < any > ((resolve, reject) => {
    this.http.post(url, soapMessage, {
      headers: new HttpHeaders().set('Content-Type', 'text/xml'),
      responseType: 'text'
    }).toPromise().then(
      res => { // Success
        resolve();
        console.log(res);
        //return res;
      },
      msg => { // Error

      }
    );
  });
}

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Лучше использовать rxjs, наблюдаемый.

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import {Observable} from 'rxjs';
import {Idata} from './Idata'
@Injectable()
export class ShareService {

    constructor(private httpc:HttpClient)
    {
    }

    public getPosts():Observable<Idata[]>
    {
        return this.httpc.get<Idata[]>('https://jsonplaceholder.typicode.com/posts');
    }
}

//In your component subscribe to Observable<Idata[]> to get instance of Idata


  public data:Array<Idata>=[];
  constructor(public service:ShareService)
  {
     this.service.getPosts().subscribe(value => {
        this.data=value;
     });
  }

Исполняемая демоверсия онлайн

0 голосов
/ 20 ноября 2018

Вы пропустили передачу res в разрешении:

.then(res => { // Success
      resolve(res);
      console.log(res);
      //return res;
    },

ПРИМЕЧАНИЕ:

Не совсем уверен, почему вы возвращаете обещание без всякой причины.Ваш код может быть значительно реорганизован следующим образом:

Сервис 2:

getData(id, token): Promise < any > {
  var startTime: number = new Date().getTime();

  return this.http.post(url, soapMessage, {
    headers: new HttpHeaders().set('Content-Type', 'text/xml'),
    responseType: 'text'
  });
}

Сервис 1:

this.service.getData(id, token).subscribe(
  result => {
    console.log("result " + result);
  },
  error => {
    console.log("error " + error);
  });
...