angularfire2超时和取消以保存数据

时间:2017-06-12 04:51:44

标签: angular promise timeout angularfire2

我想设置超时&取消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秒钟时,保存过程结束并显示"再次尝试"。

2 个答案:

答案 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”。