Ionic 2 wait http response

João Silva

I have been looking around how could I make my code wait for the http request before move on, the reason that I need it is because I'm using the response to fill some variables in the html.

So,

Question 1: Do I really need to create a Service to make a http request and return a Promise/Observable?

Question 2: This is my code, couldn't I just do something here to make the code wait for the response?

let link = 'http://working url';
      let headers = new Headers({
          'Content-Type': 'application/x-www-form-urlencoded',
          'Accept': '*/*'
      });

      let options = new RequestOptions({headers: headers});

      this.http
          .post(link, this.loginString, options)
          .map(res => res.json())
          .subscribe(
              data => {
                  let response = JSON.parse(data);
                  if(response.Successfull){
                      if(response.ReturnObject.length>0){
                          this.orders = this.orderJson(response.ReturnObject);
                          this.ordersWithoutGroup = response.ReturnObject;
                          this.empty = false;

                      }else{
                          this.orders= [];
                          this.empty= true;
                      }
                  }

          }, err => {
              this.showAlertError();
          }, () => {
              this.loadingPopup.dismiss()

          });
}

Thank you in advance for the help.

EDIT 1: HTML:

<ion-content class="stable-bg" scroll="true">
 <div class="item-input-inset">
     <label class="item-input-wrapper">
         <i class="icon ion-ios-search placeholder-icon"></i>
         <input type="text" placeholder="Search Orders" ng-model="search">
     </label>
 </div>
 <ion-list *ngIf="orders !== null" ng-repeat="(date, group) in orders">
     <ion-item class="item-divider">{{ date }}</ion-item>
     <ion-item class="item-icon-left item-icon-right" ng-repeat="order in group" (click)="goToDetail(order.ID)">
         <div ng-show="order.DocumentNumber.indexOf(search) >-1 || !search ">
             <i class="icon ion-card"></i>
             <div>Nº {{ order.DocumentNumber }}
                 <span class="gray pull-right">{{ order.time }}</span>
             </div>
             <i class="icon ion-ios-arrow-right"></i>
         </div>
     </ion-item>
 </ion-list>
 <div ng-show="empty">
     <div class="card">
         <div class="item item-text-wrap ion-information-circled" (click)="check()">At the moment there isn't any order to
approve.</div>
     </div>
  </div> 
</ion-content>

More code about the .ts:

import { Component , OnInit, Injectable} from '@angular/core';
import { NavController, AlertController, LoadingController } from 'ionic-angular';
import { Http, Headers, RequestOptions} from '@angular/http';
import * as moment from 'moment';


@Injectable()
@Component({
selector: 'page-orders',
templateUrl: 'orders.html'
})
export class OrdersPage implements OnInit{

    orders: any;
    loginString: any;
    empty: boolean;
    ordersWithoutGroup: any;
    loadingPopup: any;;

constructor(public navCtrl: NavController,private alertController: AlertController,  private http: Http, private loadingCtrl: LoadingController) {
 this.loadingPopup = this.loadingCtrl.create({
  content: 'Loading orders...'
});

// Show the popup
this.loadingPopup.present();
  this.orders= {}
  this.loginString = localStorage.getItem("Auth");

}

ngOnInit() {
        this.getOrders();
    }

EDIT 2: My console.log about the orders: console.log(this.orders);

Sagar Kulkarni

Question 1: Do I really need to create a Service to make a http request and return a Promise/Observable?

This really depends on your implementation. Doing http.post() from the same component should not make any difference, technically. Although, some advantages to have a common service is -

  1. Modular code - As in service's purpose is to give you data. A particular component's purpose is to handle operations on that component only.

  2. Reuse - If a service is to be used from different components with more or less same behaviour, the same service can be reused and manipulated using parameters.

This is my code, couldn't I just do something here to make the code wait for the response?

The whole purpose of .subscribe() is for that. You can move all your code which is waiting for the response in this.

As for the html variables as you need, I have 2 solutions for you.

  1. Use ngIf in components UI in tags. Here, you can check for conditions like if data variable is still null or not null. In case it is not null show it. E.g. <p *ngIf="_data !== null">Show data : {{_data}}</p>. This does not need to wait for your data. Whenever the data loads, the UI will get updated.

  2. Load all the data in the previous page only. And once it is loaded push the page with navParams in .subscribe() and then render. (This was just for fast modification in your code.)

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

wait for Http response in angular 2

Angular2 wait on $http response

Rxjs Observable Interval and Angular2 HTTP: wait for response

Wait for Http response in angular 5

Wait response for http.get()

I need wait for HTTP response

ionic2- response from http request is shown as undefined

Ionic - Angular 2 - subscribe to http.post response

Ionic http fail(response 0)

Wait for multiple http response using reactor

Angular/RxJS wait for HTTP response in inner Observable

How to get HTTP JSON-response into HTML (Ionic2, Angular2, TypeScript, PHP, JSON)?

http not working in ionic 2

Get response from a HTTP request in ionic

Will JMeter wait for the HTTP response of a HTTP sample before running the next one?

wait the execution of foreach to continue next in ionic 2

Angular2 Wait for HttpPost response

Delphi send HTTP GET request without wait for the server response

NodeJS http: Wait for another response in a request listener before returning

wait for http.request response before executing further

How to wait till the response comes from the $http request, in angularjs?

How to wait for the response of http request from Protractor side

Wait for an event to happen before sending HTTP response in NodeJS?

How to wait for HTTP Request Response + Confirm Dialogue PopUp + Angular 8

how to wait for http request for returning response with in subscribe method in angular 8?

Ionic 2 : Cannot display JSON response into view

How to stop caching my HTTP request & response in ionic 3

Ionic 4 & Laravel API - Getting null response on http request

What's the best way to store a HTTP response in Ionic React?