Fungsi more()
ini seharusnya mengembalikan sebuah Observable
dari permintaan dapatkan
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();
}
);
}
}
Dalam hal ini saya hanya bisa melakukan permintaan jika hasMore()
benar, kalau tidak saya mendapatkan kesalahan pada subscribe()
fungsi subscribe is not defined
, bagaimana saya bisa mengembalikan yang kosong diamati?
this.collection.more().subscribe(
(res) =>{
console.log(res);
},
(err) =>{
console.log(err);
}
)
Memperbarui
Di RXJS 6
import { EMPTY } from 'rxjs'
return EMPTY;
javascript
typescript
rxjs
observable
Murhaf Sousli
sumber
sumber
import "EmptyObservable" from "rxjs/observable/EmptyObservable";
, kemudiannew EmptyObservable<Response>();
.Dengan sintaks baru RxJS 5.5+, ini menjadi sebagai berikut:
Hanya satu hal yang perlu diingat,
empty()
selesaikan yang dapat diamati, sehingga tidak akan memicunext
dalam aliran Anda, tetapi hanya selesai. Jadi, jika Anda memiliki, misalnya,tap
mereka mungkin tidak mendapatkan pemicu seperti yang Anda inginkan (lihat contoh di bawah).Sedangkan
of({})
menciptakanObservable
dan memancarkan berikutnya dengan nilai{}
dan kemudian melengkapiObservable
.Misalnya:
sumber
of()
percaya sajaof('foo')
Apakah memancarkan dan menyelesaikan diamati dengan segera. rxviz.com/v/0oqMVW1otake(1)
dihapus untuk jawaban yang lebih baik. @MatthijsWessels, ya dan tidak, baru saja menguji ini sekarang dan jika Anda melakukannyaof()
akan mengembalikan yang dapat diamati tanpa memancarkannext
RxJS6 (tanpa paket kompatibilitas yang diinstal)
Sekarang ada
EMPTY
konstanta danempty
fungsi.Observable.empty()
tidak ada lagi.sumber
empty()
fungsi yang sudah Anda dapat katakanimport { empty as rxEmpty }
atauimport { empty as _empty }
dan kemudian lakukanrxEmpty()
atau_empty()
. Tentu saja itu hal yang sangat tidak standar untuk dilakukan dan saya tidak benar-benar merekomendasikannya, tapi saya yakin saya bukan satu-satunya yang terkejut. RxJS berpikir layak mengimpor fungsi sepertiof
danempty
ke namespace saya!import { EMPTY } from "@angular/core/src/render3/definition";
yang sama sekali bukan yang Anda inginkan. Jadi, jika Anda mendapatkan kesalahan aneh, pastikan Anda tidak mengimpornya secara tidak sengaja.Observable.empty()
sebenarnya masih ada tetapi sudah tidak digunakan lagiEMPTY
.Dalam kasus saya dengan Angular2 dan rxjs, ini bekerja dengan:
sumber
import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
Ya, ada operator kosong
Untuk naskah, Anda dapat menggunakan
from
:sumber
Rx.Observable<{}>
tidak dapat ditugaskanObservable<Response>
, saya mencobaRx.Observable<Response>.empty()
tetapi tidak berhasilObservable<any>
dan itu berhasil, terima kasih sobat.Rx.Observable.from([])
tanpa<Response>
. Kalau tidak mendapatkan kesalahan "ekspresi yang diharapkan".Rx.Observable.of([])
.Observable.of([])
, ada satu nilai yang dipancarkan ([]
) dan kemudian aliran selesai. DenganObservable.from([])
, tidak ada nilai yang dipancarkan, streaming selesai dengan segera.Beberapa cara untuk membuat Empty Observable:
Mereka hanya berbeda pada bagaimana Anda akan menggunakannya lebih lanjut (peristiwa apa yang akan memancarkan setelah:
next
,complete
ataudo nothing
) misalnya:Observable.never()
- Tidak memancarkan acara dan tidak pernah berakhir.Observable.empty()
- Hanya memancarkancomplete
.Observable.of({})
- memancarkan keduanyanext
dancomplete
(Objek kosong literal diteruskan sebagai contoh).Gunakan sesuai kebutuhan Anda)
sumber
Anda dapat mengembalikan Observable.of (empty_variable), misalnya
sumber
Atau Anda dapat mencoba
ignoreElements()
jugasumber
RxJS 6
Anda dapat menggunakan juga dari fungsi seperti di bawah ini:
setelah impor:
sumber
Datang ke sini dengan pertanyaan serupa, di atas tidak berfungsi untuk saya
"rxjs": "^6.0.0"
di:, untuk menghasilkan yang dapat diamati yang tidak memancarkan data yang perlu saya lakukan:sumber
Coba ini
sumber