javascript - 如何使用返回http promise的angular 2服务

标签 javascript angular ionic2 undefined angular-promise

我在这里遇到 Angular 2 的问题。 我使用返回 promise 的服务,但是当我尝试检索响应时出现错误。

我读了这个this stact question 这是我的代码。

这是 HotelService.ts

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

//rxjs promises cause angular http return observable natively.
import 'rxjs/add/operator/toPromise';

@Injectable()
export class HotelService {

    private BASEURL : any = 'http://localhost:8080/hotel/';

    constructor(private http: Http) {}  

    load(): Promise<any> {
        return this.http.get(this.BASEURL + 'api/client/hotel/load')
            .toPromise()
            .then(response => {
                response.json();
                //console.log(response.json());
            })
            .catch(err => err);
    }
}

这个 Hotel.ts(组件)

import { Component, OnInit } from '@angular/core';
import { NavController } from 'ionic-angular';

import { HotelService } from '../../providers/hotel/hotelservice';

import { AboutPage } from '../../pages/about/about';
import { HotelDetailPage } from '../../pages/hoteldetail/hotel';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html',
  providers: [HotelService]
})
export class HomePage implements OnInit {

  public searchBoxActive = false;
  public hotels: any;

  constructor(
    private navCtrl: NavController,
    private hotelServ: HotelService
    ) { }

  load() {
    this.hotelServ.load()
      .then(res => {
        this.hotels = res;
        console.log(res); //why the rest is undefined?
        console.log('ini component');
      },
      err => err);
  }

  toggleSearchBox() {
    if (this.searchBoxActive == false) {
        this.searchBoxActive = true;
    } else {
        this.searchBoxActive = false;
    }
  }

  showAbout() {
    this.navCtrl.setRoot(AboutPage);
  }

  pushDetail(evt, id) {
    this.navCtrl.push(HotelDetailPage)
  }

  ngOnInit(): void {
    this.load();
  }
}

我不知道。

最佳答案

你需要从 promise 返回 response.json() 然后回调:

load(): Promise<any> {
    return this.http.get(this.BASEURL + 'api/client/hotel/load')
        .toPromise()
        .then(response => {
            return response.json();
        })
        .catch(err => err);
}

关于javascript - 如何使用返回http promise的angular 2服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41810298/

相关文章:

Javascript - Opera 11.60 和 IE 8 上的排序功能问题

javascript - 我得到 "Expected an conditional expression and instead saw an assignment"即使它有效

javascript - 如何在javascript中获取foreach输入值并将其传递给ajax数据?

javascript - 如何在标准/ native JavaScript 函数中设置断点?

angular - 如何从与 Angular 4 集成的 odooRPC 响应中捕获错误代码

javascript - 根据 Angular 4 中的页面选择更改 div 的颜色

javascript - Angular/Typescript 二维数组问题

ios - ionic 构建 ios 成功,但 ionic 构建 ios --release 失败

javascript - Ionic2错误属性 'openDatabase'在类型 'Window'上不存在

typescript - Symfony3 JWT 与 LexikJWTAuthenticationBundle 在预检选项上返回 404