【问题标题】:Angular 6/Typescript HTTP post request returns undefined when service called from another service当从另一个服务调用服务时,Angular 6/Typescript HTTP 发布请求返回未定义
【发布时间】:2019-04-23 00:15:56
【问题描述】:

我正在使用 Angular 6。

我正在从另一个服务(服务 1)调用服务(服务 2)getData。在 service2 中 post 请求成功,并将数据打印到控制台。但是,数据不会返回到调用 service2 的 service1,并且“结果”对象始终未定义。

调用服务(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

      }
    );
  });
}

【问题讨论】:

  • 你用一个空对象来履行承诺。将res 对象传递给resolve 方法。

标签: angular typescript promise angular6 angular-promise


【解决方案1】:

您错过了通过res 解决:

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

注意:

不太清楚为什么你会无缘无故地返回一个 Promise。您可以像这样对代码进行重大重构:

服务 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);
  });

【讨论】:

    【解决方案2】:

    更好地使用 rxjs observable。

    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;
         });
      }
    

    Executable online demo

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多