我正在尝试使用离子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中有一个选项可以做到这一点吗?或者我应该使用解决方法吗?
答案 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);