2016-04-08 21 views

cevap

28

Burada unsubscribe

let sub = this.http.get(url, {headers: reqHeaders}) 
      .subscribe(
       (res) => { 
        res = res.json(); 

        this.currentLoading.delete(url); 
        this.cache.set(url, res); 

        resolve(res); 
       } 
      ); 

sub.unsubscribe(); 

Daha bilgi çağırabilir.

import { Injectable } from '@angular/core' 
import { Http } from '@angular/http' 
import { Observable } from 'rxjs/Observable' 
import { Subscriber } from 'rxjs/Subscriber' 

@Injectable() 
export class SomeHttpServiceService { 
    private subscriber: Subscriber<any> 
    constructor(private http: Http){ } 

    public cancelableRequest() { 
    let o = new Observable(obs => subscriber = obs) 
    return this.http.get('someurl').takeUntil(o) 
     .toPromise() //I dont like observables 
     .then(res => { 
     o.unsubscribe 
     return res 
     }) 
    } 
    public cancelRequest() { 
    subscriber.error('whatever') 
    } 
} 

Bu elle isteği iptal sağlar:

Partiye geç
if (this.subscription) { 
    this.subscription.unsubscribe(); 
} 
this.subscription = this.http.get('awesomeApi') 
.subscribe((res)=> { 
    // your awesome code.. 
}) 
+1

Bu cevap beta.15'te artık geçerli değil. Şu anda Gözlemlenebilir'de “abonelikten çıkma” yöntemi yoktur. – tom10271

+1

"abonelikten çık" yerine "dispose" ile değiştirildi. – Menello

+1

Angular2 RC.5 kullanıyorum ve 'aboneliği iptal et' mevcut (rxjs sürüm 5.0.0-beta.6). Yorumlar yapıldıktan sonra belki geri yüklendi? Tutarsızlığın nereden geldiğinden emin değilim. –

20

yapabilirsiniz kullanım aşağıdaki basit çözüm:

return new Promise((resolve, reject) => { 
    this.currentLoading.set(url, {resolve, reject}); 

    this.http.get(url, {headers: reqHeaders}) 
     .subscribe(
      (res) => { 
       res = res.json(); 

       this.currentLoading.delete(url); 
       this.cache.set(url, res); 

       resolve(res); 
      } 
     ); 
}); 
+1

' elden hakkında soru kapatmak olacak - Bu cevap –

+0

olmalıdır? – tom10271

+0

sonra() '' yakalamak() '' o '.toPromise()' yöntemiyle yapılması mümkün mü gibi o zaman TGH en birinin @ işaretlemeniz gerekir doğruysa bu kabul cevap –

3

Biraz ama burada benim alabilir. Bazen sayfadaki bir sonuçta değişiklik yapacak bir gözlem veya sözle sonuçlanırım. Eğer istek otomatik olarak başlatılmışsa (kullanıcı x millis için bir alana herhangi bir şey yazmamışsa) isteği iptal edebilmek güzeldir (kullanıcı aniden tekrar bir şeyler yazıyor).

takeUntil ayrıca basit bir şekilde çalışmalıdır. zaman aşımı (Observable.timer) belirlersiniz https://www.learnrxjs.io/operators/filtering/takeuntil.html

+1

Neden gözlenebilirleri sevmiyorsunuz? Http için aynı sözdür, ama aynı zamanda hata var ve tam – Mick

+0

@Mick, bence Clearfix sadece OP'in tercihlerini yerine getiriyordu, fikrini ifade etmiyordu. #theSpiritOfStackOverflow – Rap

İlgili konular