如果开始新的通话,我想忽略/断开所有以前的http通话。例如:
data: string;
updateDataById(id: number) {
this.http.get('url', {params: {id}}).subscribe(response => this.data = response);
}
ngOnInit() {
// First call, it will takes 3s, response will be 'cat'.
this.updateDataById(8);
// Second call, but it will take only 1s, response will be 'dog'.
this.updateDataById(46);
}
在这种情况下,由于第一次呼叫的响应时间长于第二次呼叫的响应时间,因此数据值将首次为“ dog”,然后将其更改为“ cat”。
数据如何首先成为“狗”?
答案 0 :(得分:1)
您可以使用switchMap
运算符,但是从您的示例中,我不确定您如何调用更改。要点:
// Start the "faster" request
of(fakeHttp()).pipe(
// Switch to the this observable, cancelling the previous.
switchMap(() => fakeHttp(true))
).subscribe(console.log); // 'cat' is never output
function fakeHttp(long = false) {
return new Promise(resolve => {
console.log('Faking', long) // First outputs 'cat', then 'dog'
setTimeout(() => {
resolve(long ? 'dog' : 'cat')
}, long ? 2000 : 200)
})
}