让功能超时'经过一段时间

时间:2017-06-27 09:18:02

标签: angular typescript ionic2

我正在尝试使用离子2框架创建移动应用程序。 (以Angular 2撰写)。

现在我的应用中有FileUpload个选项。但是,当用户的互联网连接不良或应用程序内部出现问题时,这需要很长时间。现在我想要实现的是让这个文件上传类型超时' 7秒后。

如何在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中有一个选项可以做到这一点吗?或者我应该使用解决方法吗?

2 个答案:

答案 0 :(得分:2)

RxJS中的Observable对象上有.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~Observable.html#instance-method-timeout

答案 1 :(得分:1)

如果您关心的是7秒后未执行的回调,那么您可以在7秒后取消订阅您的观察点:

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