我想为 firebase 数据库保存数据设置超时和取消。当前代码如下
import {AngularFireDatabase} from 'angularfire2/database';
export class XXX{
constructor(private af_db: AngularFireDatabase){}
const items = this.af_db.list('/path');
const promise = items.push(data);
promise.then(()=>{
}).catch((err)=>{
})
在此代码中,当用户离线时,它会继续等待网络连接,并在建立连接后执行保存数据。我想为它设置两个功能
取消: 当用户单击"关闭"按钮时,将停止保存过程。
超时: 当开始处理保存后超过 3 秒时,保存过程完成并显示"重试"。
取消。你不能取消承诺,一旦操作开始,你就无法控制它。
超时。如果您想对此特定操作使用超时,那么我相信这是不可能的。即使您在 3 秒后向用户显示超时消息,操作本身也在进行中,稍后会成功或失败。
你可以将一个简单的API(使用Express(写入Cloud Functions。然后为 HTTP 设置超时并使用 Observable.retry,可能是这样的:
import 'rxjs/add/operator/retry';
import 'rxjs/add/operator/timeout';
this.sub = this.http.post(urlToYourCloudFunction, data, {timeout: 1000, headers:{authorization: this.authToken}})
.retry(3)
.timeout(4000);
要取消:
if (this.sub) { this.sub.unsubscribe(); }
不是100%的证据。在云函数向你发送响应期间,你仍有可能失去连接。如果是推送,而不是更新,您最终可能会得到重复项。您可以通过在客户端创建密钥来避免这种情况,从而使它成为"更新器"。