Обработка обещаний в оффлайне в Angularfire2 - PullRequest
0 голосов
/ 29 мая 2019

Насколько я понимаю, Angularfire2 возвращает Promise всякий раз, когда запрос выполняется успешно (кроме выборки, когда он возвращает данные).

Функциональность :

Iесть приложение, в котором при сохранении элемента вызывается функция, внутри которой, если заданный запрос успешно выполнен (т. е. он получает Promise ), он переходит на предыдущую страницу.Он отлично работает, когда приложение находится в сети, но приложение также должно работать в автономном режиме.Я включил постоянство и настроил сервисных работников для того же

Проблема

Но когда в автономном режиме код после запроса не возвращает Promise, так и не вызывается. Так что должно бытьожидаемая логика или поведение в автономном режиме.

                this._itemService.setItem(item).then(()=>{
                    const message = item.name + saveMessage;
                    this.snackBar.open(message," ",{duration:2000});
                    this.location.back();

                }

Ответы [ 2 ]

0 голосов
/ 29 мая 2019
           let itemPromise= this._itemService.setItem(item);

            if(navigator.onLine && itemPromise instanceof Promise){
                itemPromise.then(()=>{
                    const message = item.name + "account saved";
                    this.snackBar.open(message," ",{duration:2000});

                   ...More code
                    this.closeClicked();
                });
            }else{

                const message = item.name + "account saved";
                this.snackBar.open(message," ",{duration:2000});
                this.closeClicked();
            }
0 голосов
/ 29 мая 2019

Код после обещания не вызывается, потому что вы получаете ошибку, так как вы не можете получить доступ к источнику, когда вы находитесь в автономном режиме.Добавьте ErrorHandling после Promise, как описано здесь: Использование success / error / finally / catch с Promises в AngularJS

В ErrorHandling вы можете добавить поведение приложения, когда ононе в сети.

this._itemService.setItem(item).then(()=>{
    const message = item.name + saveMessage;
    this.snackBar.open(message," ",{duration:2000});
    this.location.back();
).catch((e) => {
    //Do what you want when you don't get the Promise
    this.location.back();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...