让函数在一定时间后"超时"



我正在尝试使用离子2框架创建一个移动应用程序。(用Angular 2编写(。

现在,我的应用程序中有一个FileUpload选项。但是,这需要很长时间的用户在应用程序本身中具有不良的互联网连接或出现问题所需的时间。现在,我想实现的是在7秒后将此FileUpload的"超时"。

在Angular 2中如何可能?

我正在考虑有这样的解决方法(演示目的,而不是实际代码(:

let doneUploading: boolean = false;
this.http.post(url, data, options).subscribe(response => {
   doneUploading = true;
   ....
}, err => {
   doneUploading = true;
   ....
});
setTimeout(()=> {
  if(!doneUploading) {
    alert("TIMEOUT");
  }
}, 7000);

,但这感觉就像是一个黑客的解决方法。Angular 2中有没有选择?还是我应该只使用解决方法?

rxjs中的可观察对象上有.timeout((和.timeoutwith方法。

let subscription = this.http.post(url, data, options)
    .timeout(7000, new Error("TIMEOUT"))
    .subscribe(response => {
    },
    err => {
       alert(err);
    });

http://reactivex.io/rxjs/class/es6/observable.js~ibservable.html#instance-method timeout

如果您所关心的只是在7秒后未执行的回调,则可以在7秒后退订可观察到的:

let subscription = this.http.post(url, data, options)
    .subscribe(response => {
    },
    err => {
    });
setTimeout(() => {
    subscription.unsubscribe();
}, 7000);

相关内容

  • 没有找到相关文章

最新更新