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.