Угловые / машинописные обещания - PullRequest
0 голосов
/ 24 мая 2018

Я запутался в Обещаниях.Я хочу подождать, пока checkNewVersion () завершит работу, а затем выполнить инструкцию then, но в данный момент сначала вызывается метод Finish, а затем Api response

page.ts

public ionViewDidLoad() {
    this.platform.ready()
        .then(() => {
            this.versionChecker.checkNewVersion()
                .then(response => {
                    console.log('finished')
                })
        });
}

version-checker.ts

public checkNewVersion(force?: boolean): Promise<CheckResult> {
let platform = this.platform.is("ios") ? 'ios' : 'android';
if (force || this.shouldCheck()) {
    return  this.checkPromise = this.api.post('check-version', {platform: platform, version: '0.2.1'})
  .then(response => {
      console.log('api response')
      let result = {
          latest: response.latest,
      }
    return result;
  });
}
return this.checkPromise;
}

api-service.ts

public post(path: string, body: any): Promise<any> {
    //add location if we have it.
    let postBody = {...body};
    postBody.locationInfo = this.locationService.getUpdatedLocation();

    return this.http.post(this.settings.api + path, postBody, { headers: this.headers })
        .map((res: Response) => { return res.json(); })
        .catch((err: Response, obs: Observable<any>) => {
            return this.handleError(err, obs);
        })
        .toPromise();
}

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Изменить version-checker.ts следующим образом:

public checkNewVersion(force?: boolean): Promise<CheckResult> {
  let platform = this.platform.is("ios") ? 'ios' : 'android';
  return new Promise((resolve, reject)=>{
    if (force || this.shouldCheck()) {
      this.api.post('check-version', {platform: platform, version: '0.2.1'})
        .then(response => {
          console.log('api response')
          let result = {
              latest: response.latest,
          }
          resolve(result);
     });
    }else{
       reject("your error...");
    }
 });
}
0 голосов
/ 24 мая 2018

Вы можете использовать async в начале функции и await в вызове к обещанию:

Пример

async ionViewDidLoad() {
    await this.versionChecker.checkNewVersion()
        .then(response => {
              console.log('finished')
        });

    this.platform.ready()
        .then(() => {

        });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...