我正在开发一个基于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文档说,这个承诺将在与远程服务器同步完成后解决(这听起来很合理),但看起来它的行为方式不同......
所以,问题是:如果离线(如果我不需要所有奇特的离线功能),如何强制它拒绝承诺?
答案 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 :-(
}
);
}