সাবস্ক্রাইব অবশেষে পর্যবেক্ষণযোগ্য


105

এই আর্টকল অনুযায়ী , onCompleteএবং এর onErrorফাংশন subscribeপারস্পরিক একচেটিয়া।

অর্থ হয় ঘটনা onErrorবা onCompleteআমার মধ্যে আগুন লাগবে subscribe
আমার একটি লজিক ব্লক রয়েছে যা আমি কোনও ত্রুটি পেয়েছি কিনা তা কার্যকর করা দরকার, বা আমি আমার তথ্যগুলির বাষ্প সফলভাবে শেষ করেছি।

আমি finallyপাইথনের মতো কিছু সন্ধান করলাম, তবে finallyযা কিছু পেয়েছি তা হ'ল যা আমি তৈরি পর্যবেক্ষণযোগ্য এর সাথে সংযুক্ত করা দরকার।

তবে আমি সাবস্ক্রাইব করলেই এবং স্ট্রিমটি শেষ হওয়ার পরে, সফলভাবে বা কোনও ত্রুটিযুক্ত হয়েই সেই যুক্তিটি করতে চাই।

কোন ধারনা?

উত্তর:


130

এই অপারেটরের বর্তমান "পাইপযোগ্য" রূপটি বলা হয় finalize()(আরএক্সজেএস 6 থেকে) since পুরানো এবং এখন finally()অবহেলিত "প্যাচ" অপারেটরকে ডাকা হয়েছিল (আরএক্সজেএস 5.5 পর্যন্ত)।

আমি মনে করি finalize()অপারেটরটি আসলে সঠিক। তুমি বলো:

আমি যখন সাবস্ক্রাইব করব তখনই এবং সেই ধারাটি শেষ করার পরে সেই যুক্তিটি করুন

যা আমি মনে করি কোন সমস্যা নয়। আপনি চাইলে এটিতে সাবস্ক্রাইব করার আগে আপনি একটি একক থাকতে পারেন sourceএবং ব্যবহার finalize()করতে পারেন। এইভাবে আপনার সর্বদা ব্যবহারের প্রয়োজন হয় না finalize():

let source = new Observable(observer => {
  observer.next(1);
  observer.error('error message');
  observer.next(3);
  observer.complete();
}).pipe(
  publish(),
);

source.pipe(
  finalize(() => console.log('Finally callback')),
).subscribe(
  value => console.log('#1 Next:', value),
  error => console.log('#1 Error:', error),
  () => console.log('#1 Complete')
);

source.subscribe(
  value => console.log('#2 Next:', value),
  error => console.log('#2 Error:', error),
  () => console.log('#2 Complete')
);

source.connect();

এই কনসোল প্রিন্ট:

#1 Next: 1
#2 Next: 1
#1 Error: error message
Finally callback
#2 Error: error message

জানুয়ারী 2019: আরএক্সজেএস 6 এর জন্য আপডেট হয়েছে


1
আকর্ষণীয় যে এটি প্রতিশ্রুতিগুলির বিপরীত প্যাটার্নের এক ধরণের, finally()পদ্ধতিটি প্রথমে সংযোজন করা হয়েছে, এবং সাবস্ক্রিপশনটি অপরিহার্যভাবে পাস / ব্যর্থ হয়ে জোর করে।
ব্র্যাডগ্রিনস 21 '15

7
হ্যাঁ, এটি খুব খারাপ। কেউ ভাবেন যে আপনার finallyকোডটিতে ব্লকটি শেষ হবে।
d512

আমি কৌণিক জেএস এর প্রতিশ্রুতি সিস্টেমটি পছন্দ করেছি ... যেমন d512 বলেছে যে আমি "শেষ পর্যন্ত" সর্বশেষ হওয়ার প্রত্যাশা করেছি ... এটিকে মোটেই পছন্দ করবেন না ...
সাম্পগুন

10
আরএক্সজেএস 5.5 হিসাবে, "অবশেষে" আর পর্যবেক্ষণযোগ্য পদ্ধতি নয়। পরিবর্তে "চূড়ান্তকরণ" অপারেটরটি ব্যবহার করুন: উত্স.পাইপ (চূড়ান্ত (())> কনসোল.লগ ('শেষ অবধি কলব্যাক'))। সাবস্ক্রাইব (...); github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md
Stevethemacguy

চূড়ান্তকরণের সমস্যাটি হ'ল এটি একটি "সম্পূর্ণ ()" কলটির জন্য অপেক্ষা করে। আপনি যদি (যদি পর্যবেক্ষণযোগ্য নির্গমন সাফল্য না হয় অবশেষে প্রতিটি নির্গমন একটি চান একটি , যদি ত্রুটি, না পরিবর্তে .. উভয় ক্ষেত্রেই, কি )?
রবার্তো টমস

64

আমার জন্য কাজ করা একমাত্র জিনিস

fetchData()
  .subscribe(
    (data) => {
       //Called when success
     },
    (error) => {
       //Called when error
    }
  ).add(() => {
       //Called when operation is complete (both success and error)
  });

26

আমি এখন একটি কৌণিক অ্যাপ্লিকেশনটিতে আরএক্সজেএস 5.5.7 ব্যবহার করছি এবং finalizeসাফল্য বা ত্রুটি কলব্যাকের আগে বরখাস্ত করা হওয়ায় অপারেটরটি আমার ব্যবহারের ক্ষেত্রে অদ্ভুত আচরণ করছে।

সাধারণ উদাহরণ:

// Simulate an AJAX callback...
of(null)
  .pipe(
    delay(2000),
    finalize(() => {
      // Do some work after complete...
      console.log('Finalize method executed before "Data available" (or error thrown)');
    })
  )
  .subscribe(
      response => {
        console.log('Data available.');
      },
      err => {
        console.error(err);
      }
  );

আমি addযা চাই তা পূর্ণ করতে আমাকে সাবস্ক্রিপশনে মেডহড ব্যবহার করতে হয়েছিল। finallyসাফল্য বা ত্রুটি কলব্যাকগুলি করার পরে মূলত একটি কলব্যাক হয়। একটি try..catch..finallyব্লক বা Promise.finallyপদ্ধতি মত।

সাধারণ উদাহরণ:

// Simulate an AJAX callback...
of(null)
  .pipe(
    delay(2000)
  )
  .subscribe(
      response => {
        console.log('Data available.');
      },
      err => {
        console.error(err);
      }
  );
  .add(() => {
    // Do some work after complete...
    console.log('At this point the success or error callbacks has been completed.');
  });

আপনাকে সাহায্য করে খুশি।
pcasme
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.