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 秒时,保存过程完成并显示"重试"。

取消。你不能取消承诺,一旦操作开始,你就无法控制它。

超时。如果您想对此特定操作使用超时,那么我相信这是不可能的。即使您在 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%的证据。在云函数向你发送响应期间,你仍有可能失去连接。如果是推送,而不是更新,您最终可能会得到重复项。您可以通过在客户端创建密钥来避免这种情况,从而使它成为"更新器"。

相关内容

  • 没有找到相关文章

最新更新