firebase.database.Reference.set返回即使在脱机模式下也会解析的promise

时间:2017-11-19 13:24:18

标签: javascript firebase firebase-realtime-database

我正在开发一个基于firebase(v4.6.2)的前端应用程序,我有一个这样的函数:

function saveSomeData(data) {
  return firebase
    .database()
    .ref("/some/reference")
    .set(data)
    .then(
      () => {
        // Success callback is always executed (even in offline mode).
      },
      reason => {
        // Error callback is never executed for some reason :-(
      }
    );
}

我决定在发生某些错误时测试应用程序行为(例如在断开连接的情况下)。我预计,退回的承诺将被拒绝,但它不是。 Firebase文档说,这个承诺将在与远程服务器同步完成后解决(这听起来很合理),但看起来它的行为方式不同......

所以,问题是:如果离线(如果我不需要所有奇特的离线功能),如何强制它拒绝承诺?

1 个答案:

答案 0 :(得分:0)

Firebase在断开连接时重新建立连接。

删除连接时发出的所有请求都会保留在队列中,并在重新建立连接时同步

导致拒绝承诺的错误包括密钥验证错误,尝试写入受保护引用的错误,例如.info/*,但不包括连接错误。

在任何情况下,同步更新&当cancelling queued requests与参考断开连接时,可以停止设置操作。

此类查询将如此。

function saveSomeData(data) {
  const ref = firebase
    .database()
    .ref("/some/reference");

  return ref.set(data)
    .then(
      () => {
          ref.onDisconnect().cancel(); 
        // Success callback is always executed (even in offline mode).
      },
      reason => {
        // Error callback is never executed for some reason :-(
      }
    );
}