Abonelik kullanımdan kaldırıldı: Hata geri araması yerine bir gözlemci kullanın


95

Linter'i çalıştırdığımda şöyle diyor:

subscribe is deprecated: Use an observer instead of an error callback

Kod (açısal uçlu açısal 7 uygulamasından):

    this.userService.updateUser(data).pipe(
       tap(() => {bla bla bla})
    ).subscribe(
       this.handleUpdateResponse.bind(this),
       this.handleError.bind(this)
    );

Tam olarak ne kullanmalıyım ve nasıl bilmiyorum ...

Teşekkürler!


1
* kullanmayı deneyin.subscribe({ next: this.handleUpdateResponse.bind(this), error: this.handleError.bind(this) })
kos

ApiRest'imi kullanarak çalışmasını sağlayamıyorum
Javier

Yanıtlar:


136

subscribekullanımdan kaldırılmadı, yalnızca kullandığınız varyant kullanımdan kaldırıldı. Gelecekte, subscribeyalnızca bir argüman alacak: nextişleyici (bir işlev) veya bir gözlemci nesne.

Yani senin durumunda kullanmalısın:

.subscribe({
   next: this.handleUpdateResponse.bind(this),
   error: this.handleError.bind(this)
});

Şu GitHub sorunlarına bakın:


6
idk ... vs kodunda gezinme hala bu sözdizimiyle kullanımdan kaldırıldığını gösteriyor (rxjs 6.5.3)
Yannic Hamann

6
Hey @YannicHamann bu yorum nedenini açıklıyor. Kullanımdan kaldırılmadı, sadece aşırı yüklemelerden birini kullanımdan kaldırdılar ve şimdi her şey kullanımdan kaldırılmış gibi görünüyor. Çoğunlukla aletle ilgili bir sorun.
Dean

Tüm abone olma yöntemleri artık rxjs 6.5.4'te kullanımdan kaldırıldığı için bu cevabın artık geçerli olmadığını düşünüyorum
Alok Rajasukumaran

39

observerNesnenin complete()yöntemi ve diğer ek özellikleri de (hala) içerebileceğini not etmek ilginç olabilir . Misal:

.subscribe({
    complete: () => { ... }, // completeHandler
    error: () => { ... },    // errorHandler 
    next: () => { ... },     // nextHandler
    someOtherProperty: 42
});

Bu şekilde, belirli yöntemleri atlamak çok daha kolaydır. Eski imzayla undefined, argümanların sırasını sağlamak ve ona bağlı kalmak gerekliydi . Şimdi, örneğin yalnızca bir sonraki ve eksiksiz bir işleyici tedarik ederken çok daha net.


10

Bunun Observable<T> | Observable<T2>aksine, yazdığınız bir nesneniz varsa bu hatayı alabilirsiniz Observable<T|T2>.

Örneğin:

    const obs = (new Date().getTime() % 2 == 0) ? of(123) : of('ABC');

Derleyici yok değil yapmak obsÇeşidi Observable<number | string>.

Aşağıdakilerin size hata vermesi sizi şaşırtabilir Use an observer instead of a complete callbackveExpected 2-3 arguments, but got 1.

obs.subscribe(value => {

});

Bunun nedeni, iki farklı türden biri olabilmesi ve derleyicinin bunları uzlaştıracak kadar akıllı olmamasıdır.

Bunun Observable<number | string>yerine geri dönmek için kodunuzu değiştirmeniz gerekiyor Observable<number> | Observable<string>. Bunun incelikleri, ne yaptığınıza bağlı olarak değişecektir.


2

Uyarıyı alıyordum çünkü abone olmak için bunu iletiyordum:

myObs.subscribe(() => someFunction());

Tek bir değer döndürdüğü için subscribeişlev imzası ile uyumsuzdu .

Buna geçmek uyarıyı ortadan kaldırır (null / void döndürür);

myObs.subscribe(() => {
  someFunction();
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.