TypeError: Du har oppgitt et ugyldig objekt der det var forventet en strøm. Du kan oppgi en Observable, Promise, Array eller Iterable.
Jeg prøver å mappe
fra et tjenesteanrop, men får en feil.
Så på https://stackoverflow.com/questions/41995647/subscribe-is-not-defined-in-angular-2 og det sto at for å abonnere må vi returnere fra innsiden av operatørene. Jeg har også retursetninger.
Her' s koden min:
checkLogin(): Observable<boolean> {
return this.service.getData()
.map(
response => {
this.data = response;
this.checkservice = true;
return true;
},
error => {
// debugger;
this.router.navigate(['newpage']);
console.log(error);
return false;
}
)
.catch(e => {
return e;
});
}
Feillogg:
TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable
49
3
I eksempelkoden din mottar
map
-operatoren to tilbakekallinger, mens den bare skal motta én. Du kan flytte feilhåndteringskoden til catch-tilbakekallet.Du må også importere operatorene
catch
ogthrow
.EDIT: Vær oppmerksom på at ved å returnere
Observable.throw
i catch-håndteringen, vil du ikke fange opp feilen - den vil fortsatt vises i konsollen.Du returnerer en Observable mens koden din bare returnerer en boolean. Så du må bruke som nedenfor
Hvis du bruker en annen vanlig tjeneste
checkservice
i ditt tilfelle, kan du ganske enkelt brukeDette vil gjøre
checkLogin()
-funksjonen din med returtype void.og du kan bruke
this.checkService
til å sjekke betingelsen.Jeg har nøyaktig samme feilmelding mens jeg gjorde enhetstesten min og kastet observerbare unntak etter å ha mocket tjenestene mine.
Jeg løste det ved å sende nøyaktig funksjon og format inne i
Observable.throw
.Faktisk kode som kaller tjenesten og
subscribe
for å få data. legg merke til atcatch
for å håndtere400
-feilen.Koden inne i tjenesten
Unit Testing
Jeg har hånet SomeService og returnert observerbare data, og det går bra, siden den har alle de nødvendige metodene i seg.
Koden ovenfor er okey, men da jeg prøvde å teste catch/error-tilstanden ved å sende
Observable.throw({})
, viste den meg feilen da den forventetResponse
type retur fra tjenesten.Så under tjenesten mocking retur ga meg den feilen.
Så jeg korrigerte det ved å replikere den eksakte forventede funksjonen i returobjektet mitt i stedet for å sende en verdi av typen
Response
.