我想设置超时&取消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秒钟时,保存过程结束并显示"再次尝试"。
答案 0 :(得分:2)
取消的。您无法取消承诺,只要操作开始,您就无法控制承诺。
超时。如果您想对此特定操作使用超时,那么我认为这是不可能的。即使您在3秒后向用户显示超时消息,操作本身也在进行中,并且稍后会成功或失败。
答案 1 :(得分:1)
您可以在Cloud Functions中编写一个简单的API(使用Express)。然后为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%证明。在Cloud Functions向您发送回复的过程中,您仍然可能失去连接。如果它是推送而不是更新,您最终可能会重复。您可以通过在客户端创建密钥来避免这种情况,从而使其成为“upsert”。