离子角度:是否有使用angularfirestore(离线)

时间:2017-12-22 10:28:53

标签: ionic3 angularfire2 angularfire2-offline

我正在使用Ionic并使用Angular firestore并具有离线持久性。 在线时,我可以在'then'括号中做一些事情,但在离线时没有任何事情发生。

添加或更新方法适用于这两种情况,但我需要一些回调来通知用户。 我发现的唯一方法是在构造函数中订阅。 问题:还有其他最佳方法吗?

import { AngularFirestore, AngularFirestoreCollection } from 'angularfire2/firestore';
...

export class MyPage {

  placeRef: AngularFirestoreCollection<Place>;

constructor(... public afs: AngularFirestore) {
this.placeRef.valueChanges()
      .subscribe(actions => {

        if (this.totPlaces < actions.length && this.totPlaces != 0) { this.onUploadComplete(); }
        this.totPlaces = actions.length;


      })
}

updateName(dataObj: any): Promise<any> {

    return new Promise((resolve, reject) => {
      this.afs
        .collection("collection-id")
        .doc("doc-id")
        .update(dataObj)
        .then((obj: any) => {
          resolve(obj);
          console.log("ok modified");
        })
        .catch((error: any) => {
          console.log("nok error");
          reject(error);

        });
    });
  }

...

this.placeRef = this.afs.collection<Place>("collection-id");
addPlace() {

      let d = new Date();
      let nd = new Date(d.getTime());

      this.placeRef.add({
        name: ...,
        note: ...,
        ...
      })
      /* see workaround "this.placeRef.valueChanges"
        .then((docRef) => {
          // only if mobile datas or wifi enabled
          console.log("Document written with ID: ", docRef.id);

          //this.onUploadComplete();

        }).catch((error) => {

          console.error("Error adding document: ", error);
        });*/

  }

}

1 个答案:

答案 0 :(得分:0)

您可以创建一个始终返回此类承诺的函数。

add(data: any): Promise<any> {

 let obj = collection.add({
   ...data
 });
 // If internet connection is available
 if(navigator.onLine && obj instanceof Promise && typeof obj.then === 'function') {
   return obj;
 }
 else {
  return new Promise((resolve, reject) => {
    resolve({action: 'ADD', mode: 'offline'});
  });
 }
}

您必须测试'obj'变量才能知道它是否是一个承诺并且具有'then'功能。