सदस्यता समाप्त हो गई है: एक त्रुटि कॉलबैक के बजाय एक पर्यवेक्षक का उपयोग करें


103

जब मैं लिंटर चलाता हूं तो यह कहता है:

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

कोड (कोणीय-क्ली के साथ एक कोणीय 7 ऐप से):

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

मुझे नहीं पता कि मुझे क्या उपयोग करना चाहिए और कैसे ...

धन्यवाद!


1
* इसलिए प्रयोग करने का प्रयास करें.subscribe({ next: this.handleUpdateResponse.bind(this), error: this.handleError.bind(this) })
kos

मैं अपने एपिरेस्ट का उपयोग करके इसे बनाने का प्रबंधन नहीं करता हूं
जेवियर

जवाबों:


144

subscribeपदावनत नहीं किया जाता है, केवल जिस संस्करण का आप उपयोग कर रहे हैं वह पदावनत है। भविष्य में, subscribeकेवल एक तर्क लेगा: या तो nextहैंडलर (एक फ़ंक्शन) या एक ऑब्जर्वर ऑब्जेक्ट।

तो आपके मामले में आपको उपयोग करना चाहिए:

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

देखिए ये GitHub मुद्दे:


6
idk ... अभी भी उस वाक्य रचना के साथ पदावनत शो कोड बनाम में मँडरा (rxjs 6.5.3)
Yannic Hamann

7
अरे @Yannic Hamann यह टिप्पणी क्यों बताती है। यह पदावनत नहीं है, उन्होंने सिर्फ एक अधिभार को हटा दिया है और अब ऐसा लगता है कि सब कुछ पदावनत है। यह ज्यादातर एक टूलींग मुद्दा है।
डीन

मुझे लगता है कि यह उत्तर अब मान्य नहीं है क्योंकि सभी सदस्यता विधियाँ अब rxjs 6.5.4 में पदावनत हो गई हैं
आलोक राजसुकुमारन

44

शायद यह ध्यान रखना दिलचस्प है कि observerऑब्जेक्ट में (अभी भी) complete()विधि और अन्य, अतिरिक्त गुण हो सकते हैं। उदाहरण:

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

इस तरह कुछ विधियों को छोड़ना बहुत आसान है। पुराने हस्ताक्षर के साथ undefinedतर्कों के क्रम में आपूर्ति और छड़ी करना आवश्यक था । अब यह बहुत स्पष्ट है जब उदाहरण के लिए केवल अगले और पूर्ण हैंडलर की आपूर्ति होती है।


11

यदि आपके पास कोई वस्तु टाइप की गई है Observable<T> | Observable<T2>- तो आपको यह त्रुटि मिल सकती है Observable<T|T2>

उदाहरण के लिए:

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

संकलक करता है नहीं कर obsप्रकार के Observable<number | string>

यह आपको आश्चर्यचकित कर सकता है कि निम्नलिखित आपको त्रुटि देगा Use an observer instead of a complete callbackऔरExpected 2-3 arguments, but got 1.

obs.subscribe(value => {

});

ऐसा इसलिए है क्योंकि यह दो अलग-अलग प्रकारों में से एक हो सकता है और संकलक उन्हें समेटने के लिए पर्याप्त स्मार्ट नहीं है।

Observable<number | string>इसके बजाय वापस जाने के लिए आपको अपना कोड बदलना होगा Observable<number> | Observable<string>। आप जो कर रहे हैं, उसके आधार पर इस की सूक्ष्मता अलग-अलग होगी।


2

मुझे चेतावनी मिल रही थी क्योंकि मैं इसे सदस्यता देने के लिए पास कर रहा था:

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

चूंकि यह एकल मान लौटाता है, इसलिए यह subscribeफ़ंक्शन हस्ताक्षर के साथ असंगत था ।

इस पर स्विच करने से चेतावनी दूर हो जाती है (रिटर्न शून्य / शून्य);

myObs.subscribe(() => {
  someFunction();
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.