2016-11-09 2 views
0

Я ищу, чтобы проверить, если обещание будет решено в ионном 2. Вот мой код:ионных 2 проверить, если обещание будет решен

ionViewDidLoad() { 
    this.loader.present(); 

    this.getCourses();//after resolve to do something 



    } 
    public getCourses(){ 
    this.coursesData.LoadData() 
     .subscribe(courseList=> { 
      courseList.forEach(course=>{ 
      var newCourse={ 
       id_course:course.id_course , 
       key_course:course.key_course, 
       course_name:course.course_name , 
       course_type:course.course_type , 
       start:course.start , 
       end:course.end , 
       point_course:course.point_course , 
       day:course.Day, 
       class:course.class, 
       lecture_name:course.lecture_name 
      } 
      this.coursesA.push(newCourse); 
      console.log(this.coursesA); 
      }); 

     this.loader.dismiss(); 
     // return this.coursesA; 

     },err=>{ 
      console.log(err); 
     }); 
    } 

У меня есть this.getCourses() функцию, после того, как она будет решена, я хочу сделать что-то еще с данными. Это мой провайдер. course-data.ts

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import 'rxjs/add/operator/map'; 

/* 
    Generated class for the CoursesData provider. 

    See https://angular.io/docs/ts/latest/guide/dependency-injection.html 
    for more info on providers and Angular 2 DI. 
*/ 
@Injectable() 
export class CoursesData { 
    public data: any = null; 

    constructor(public http: Http) { 
    console.log('Hello CoursesData Provider'); 
    } 

    LoadData(){ 
     let link = "http://adirzoari.16mb.com/selectCourses.php"; 
     return this.http.get(link) 
      .map(res => res.json()); 

    } 

} 
+0

Какая ошибка в вашей текущей функции 'this.getCourse()'? – Huiting

+0

нет ошибки, но я хочу что-то сделать после этой функции. если я напишу новую строку после this.getCourse(), она сделает это до того, как закончит функцию getCourse. странно. –

+0

Это связано с асинхронным характером JavaScript. Это позволит немедленно выполнить следующий оператор, не дожидаясь завершения 'this.getCourse()'. Подробнее: http://rowanmanning.com/posts/javascript-for-beginners-async/ – Huiting

ответ

0

Вы можете выполнить обещание цепочки.

public getCourses(){ 
    return new Promise(function(resolve, reject){ 
    this.coursesData.LoadData() 
    .subscribe(courseList=> { 
     courseList.forEach(course=>{ 
     var newCourse={ 
      id_course:course.id_course , 
      key_course:course.key_course, 
      course_name:course.course_name , 
      course_type:course.course_type , 
      start:course.start , 
      end:course.end , 
      point_course:course.point_course , 
      day:course.Day, 
      class:course.class, 
      lecture_name:course.lecture_name 
     } 
     this.coursesA.push(newCourse); 
     console.log(this.coursesA); 
     }); 

    this.loader.dismiss(); 
    resolve(); 

    },err=>{ 
     console.log(err); 
     reject(err); 
    }); 

    }); 
} 

ionViewDidLoad() { 
    this.loader.present(); 

    var getCoursesPromise = this.getCourses(); 

    var nextStepPromise = getCoursesPromise.then(function(result){ 
     //do what you want to do after this.getCourses 

    }).catch(function(reject){ 
     console.log(reject); 
    }); 

} 

Вам нужно будет решить, когда вы хотите вызвать разрешение(), чтобы вернуть объект обещания.

Смежные вопросы