javascript - معنى - rxjs شرح




إرجاع فارغة يمكن ملاحظتها (8)

الدالة more() من المفترض أن ترجع Observable من طلب الحصول على

export class Collection{

    public more = (): Observable<Response> => {
       if (this.hasMore()) {

         return this.fetch();
       }
       else{
         // return empty observable
       }
    }

    private fetch = (): Observable<Response> => {
       return this.http.get('some-url').map(
          (res) => {
              return res.json();
          }
       );
    }
}

في هذه الحالة ، لا يمكنني تقديم طلب إلا إذا كان hasMore() صحيحًا ، وإلا فقد حدث خطأ في subscribe() subscribe is not defined ، كيف يمكنني إرجاع ملاحظة فارغة؟

this.collection.more().subscribe(
   (res) =>{
       console.log(res);
   },
   (err) =>{
       console.log(err);
   }
)

تحديث

في RXJS 6

import { EMPTY } from 'rxjs'

return EMPTY; 

RxJS6 (بدون تثبيت حزمة التوافق)

هناك الآن وظيفة empty ووظيفة empty .

  import { Observable, empty, of } from 'rxjs';

  var delay = empty().pipe(delay(1000));     
  var delay2 = EMPTY.pipe(delay(1000));

Observable.empty() غير موجود بعد الآن.


أو يمكنك تجربة ignoreElements() أيضًا


جرب هذا

export class Collection{
public more (): Observable<Response> {
   if (this.hasMore()) {
     return this.fetch();
   }
   else{
     return this.returnEmpty(); 
   }            
  }
public returnEmpty(): any {
    let subscription = source.subscribe(
      function (x) {
       console.log('Next: %s', x);
    },
    function (err) {
       console.log('Error: %s', err);
    },
    function () {
       console.log('Completed');
    });
    }
  }
let source = Observable.empty();

في حالتي مع Angular2 و rxjs ، عملت مع:

import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
...
return new EmptyObservable();
...

مع بناء الجملة الجديد من RxJS 5.5+ ، يصبح هذا كما يلي:

// rxjs 6
import { empty, of } from "rxjs";

// rxjs 5.5+ (<6)
import { empty } from "rxjs/observable/empty";
import { of } from "rxjs/observable/of";

empty();
of({});

هناك شيء واحد يجب أخذه في الاعتبار ، empty() يكمل الملاحظة ، لذلك لن يتم تشغيله next في ساحة مشاركاتك ، لكنه يكتمل فقط. لذلك ، إذا كان لديك ، على سبيل المثال ، tap ، فقد لا يتم تشغيلها كما تشاء (انظر مثال أدناه).

بينما تقوم of({}) بإنشاء " Observable وتنبعث منها بقيمة {} ثم تكمل " Observable .

على سبيل المثال:

empty().pipe(
    tap(() => console.warn("i will not reach here, as i am complete"))
).subscribe();

of({}).pipe(
    tap(() => console.warn("i will reach here and complete"))
).subscribe();

نعم ، هناك مشغل Empty

Rx.Observable.empty();

للكتابة على الآلة الكاتبة ، يمكنك استخدام from :

Rx.Observable<Response>.from([])

RxJS 6

يمكنك أيضا استخدام من وظيفة مثل أدناه:

return from<string>([""]);

بعد الاستيراد:

import {from} from 'rxjs';

عدة طرق لإنشاء ملاحظة فارغة:

إنهم يختلفون فقط حول الطريقة التي ستستخدمها أكثر (ما هي الأحداث التي ستصدر بعد: next ، complete أو do nothing ) على سبيل المثال:

  • Observable.never() - لا تصدر أية أحداث ولا تنتهي أبدًا.
  • Observable.empty() - تنبعث complete فقط.
  • Observable.of({}) - تنبعث كل من next complete (تم تمرير حرفي كائن فارغ كمثال).

استخدامه في الاحتياجات الخاصة بك بالضبط)





observable