Angularfire2中的脱机承诺处理

时间:2019-05-29 07:05:49

标签: angular firebase google-cloud-firestore angularfire2

据我了解,每当查询成功运行时,Angularfire2都会返回Promise (除了返回数据时取回)。

功能

我有一个应用程序,其中保存项目时会在其中调用一个函数,如果设置查询成功运行(即它收到Promise ),它将导航到上一页。 当应用程序在线时,它可以完美运行,但该应用程序也需要脱机工作。我已经启用了持久性并为它配置了服务工作者

问题

但是当离线时查询后返回Promise的代码不会被调用,因此离线期间预期的逻辑或行为应该是什么?

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

                }

2 个答案:

答案 0 :(得分:0)

未调用promise后的代码会导致您收到错误,因为离线时无法访问源。 在Promise之后添加一个ErrorHandling,如下所述: Using success/error/finally/catch with Promises in 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();
});

答案 1 :(得分:0)

           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();
            }