Как использовать контроллер загрузки с длительностью

#ionic-framework #ionic3

#ionic-framework #ionic3

Вопрос:

У меня есть свой LoadingController :

 const loader = this.loadCtrl.create({
     content: 'Loading ...',
     duration: 5000
});
loader.present();
  

Сразу после того, как у меня есть вызов api

 myApi.Function().then(res => {
   console.log(res);
}
  

Я хочу, чтобы dismiss мой LoadingController завершался, когда мой вызов api завершен ИЛИ если моя продолжительность завершена.

Как я могу вызвать событие loader.dismiss() после продолжительности?

Спасибо,

Комментарии:

1. если вы используете then свой Function , вы должны вернуть обещание. если это не так, попробуйте использовать subscribe вместо этого.

Ответ №1:

Вы можете использовать Promise.race() для этого:

Promise.race() Метод возвращает обещание, которое разрешает или отклоняет, как только одно из обещаний в итерируемом разрешает или отклоняет, со значением или причиной из этого обещания.

 const delayPromise = new Promise(resolve => window.setTimeout(() => resolve(), 3000));
const apiPromise = myApi.Function();

const loader = this.loadCtrl.create({
     content: 'Loading ...',
});
loader.present();

Promise.race([delayPromise, apiPromise]).then(res => {
    loader.dismiss();

    if(res) {
        // apiPromise finished first
    } else {
        // delayPromise finished first
    }
});