সদস্যতা হ্রাস করা হয়েছে: ত্রুটি কলব্যাকের পরিবর্তে একটি পর্যবেক্ষক ব্যবহার করুন


94

আমি যখন লিন্টারটি চালাই তখন এটিতে বলা হয়:

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)
    );

আমার ঠিক কী ব্যবহার করা উচিত এবং কীভাবে তা জানেন না ...

ধন্যবাদ!


4
* তাই ব্যবহারের চেষ্টা করুন.subscribe({ next: this.handleUpdateResponse.bind(this), error: this.handleError.bind(this) })
কোস

আমি আমার এপিআরয়েস্টটি ব্যবহার করে এটি পরিচালনা করতে পরিচালনা করি না
জাভিয়ার

উত্তর:


134

subscribeঅবচিত করা হয়নি, আপনি যে বৈকল্পিকটি ব্যবহার করছেন কেবল তা হ্রাস করা হয়েছে। ভবিষ্যতে, subscribeকেবলমাত্র একটি যুক্তি গ্রহণ করবে: হয় nextহ্যান্ডলার (একটি ফাংশন) অথবা কোনও পর্যবেক্ষক বস্তু।

সুতরাং আপনার ক্ষেত্রে আপনার ব্যবহার করা উচিত:

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

এই গিটহাব সমস্যাগুলি দেখুন:


6
আইডিডি ... বনাম কোডে ঘুরে বেড়ানো এখনও সেই সিনট্যাক্সের সাথে অবচয় দেখায় (rxjs 6.5.3)
ইয়ানিক হামান

6
আরে @ ইয়ানিকহ্যামন এই মন্তব্যটি কেন তা ব্যাখ্যা করে। এটি হ্রাস করা হয়নি, তারা কেবলমাত্র একটি ওভারলোডকে হ্রাস করেছে এবং এখন দেখে মনে হচ্ছে যে সবকিছু হ্রাস করা হয়েছে। এটি বেশিরভাগ ক্ষেত্রে একটি সরঞ্জাম সরঞ্জাম।
ডিন

আমি মনে করি এই উত্তরটি আর বৈধ নয় কারণ সমস্ত সাবস্ক্রাইব পদ্ধতিটি এখন আরএক্সজেজে 6.5.4 এ অবচিত করা হয়েছে
অলোক রাজাসুকুমারান

39

লক্ষ্য করা আকর্ষণীয় হতে পারে যে observerঅবজেক্টটিতে complete()পদ্ধতি (এবং এখনও) অতিরিক্ত বৈশিষ্ট্য থাকতে পারে (এখনও) । উদাহরণ:

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

এই পদ্ধতিতে নির্দিষ্ট পদ্ধতি বাদ দেওয়া আরও সহজ। পুরানো স্বাক্ষর সহ undefinedযুক্তিগুলির ক্রম সাপ্লাই করা এবং আটকে থাকা প্রয়োজনীয় ছিল । উদাহরণস্বরূপ শুধুমাত্র পরবর্তী এবং সম্পূর্ণ হ্যান্ডলার সরবরাহ করার সময় এখন এটি আরও পরিষ্কার।


10

এর Observable<T> | Observable<T2>বিপরীতে যদি আপনার কাছে কোনও বিষয় টাইপ করা থাকে তবে আপনি এই ত্রুটিটি পেতে পারেন Observable<T|T2>

উদাহরণ স্বরূপ:

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

সংকলক ধরণের তৈরি করে নাobsObservable<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();
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.