Winkel 4, Wie man richtig eine void zurückgeben beobachten
In meinem Winkel 4 Anwendung habe ich eine Methode haben, um eine beobachtbare,
diese Methode haben 3 Bedingungen, ersten und zweiten Bedingungen machen einen get-Aufruf, aber der Dritte Bedingungen haben nichts zu tun und ich habe in diesem Fall, um eine observable zu, denn diese Methode ist der erste Teil einer .flatmap
operator, also um die Kette der zweite Teil der flatmap ich brauche ein beobachten aus dem ersten Teil.
Ich versuche mit: return new Observable<void>();
aber ich habe diesen Fehler:
FEHLER TypeError: Cannot read property 'abonnieren' undefined
Dies ist die erste Methode, die einen Dienst aufrufen um die Daten zu laden.
loadModelData() {
this.customerService.getModelDetail(this.code)
.subscribe(response => {
this.selected = response.body as Customer;
});
}
}
Dies ist die service-Methode, die zur Kette 2 Anrufe.
getModelDetail(code) {
const params = new HttpParams().set('projection', 'withBalance');
return this.endPointUrlService.loadMaps(this.entityLink)
.flatMap((res) => {
return this.http.get(this.endPointUrlService.cutLinks(
this.endPointUrlService.map.get('customers')) + '/' + code, {observe: 'response', params: params})
.map((response) => <any>response);
})
}
Ist und diese Methoden von einem support-service namens endPointUrlService, checkIfMapIsReady() ist die Methode, die eine void zurückgeben, erkennbar im Dritten Fall
loadMaps(entityLink: EntityLink[]): Observable<void> {
console.log(entityLink);
for (const i in entityLink) {
if (entityLink.hasOwnProperty(i)) {
return this.checkIfMapIsReady(entityLink[i].name, entityLink[i].searchMap, entityLink[i].endPoints[0])
}
}
}
public checkIfMapIsReady(modelName: string, mapName: string, endPoints: string) {
if (this.map.get(modelName) === undefined) {
console.log('endpoint url service All maps undefined ' + modelName);
return this.getLinks(modelName, this.mapNames.get(mapName), false)
} else {
console.log('endpoint url service Populate only ' + mapName);
if (this.mapNames.get(mapName).get(endPoints) === undefined) {
return this.getLinks(modelName, this.mapNames.get(mapName), true)
} else {
return new Observable<void>();
}
}
}
InformationsquelleAutor Alessandro | 2017-11-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht
Observable.empty()
ist eine bessere Optionen, da es nicht emittieren keine Werte, die nachgelagerten Betreibern kann nicht ein problem mit dem, was es gibt!Hinweis, downstream
flatMap(res => ...)
undsubscribe()
wird nicht ausgelöst.Da bist du nicht mit
res
ich vermute, dies ist der gewünschte Effekt?Für eine gute Maßnahme, stellen Sie den return-Typ
Observable<any>
.Ich denke unten ist logisch äquivalent zu der gebuchten
checkIfMapIsReady()
,Observable.empty()
in meinem code stattObservable<void>()
ich habeThe type argument for type parameter 'T' canno t be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate 'void' is not a valid type argument because it is not a supertype of candidate '{}'.
Für eine gute Maßnahme, stellen Sie den return-Typ Beobachtbare<alle>. - das ist bezogen auf die return-Typ in der Signatur der Methode. Mit 'any' als eine Art hält Typoskript beschweren sich über die Art, nützlich, wenn Sie wollen, könnte eine von zwei Typen (wie Sie sind).
wenn ich
return new Observable<void>()
ich habe ein problem im ersten Teil der flatmap:Type 'Observable<{}>' is not assignable to type 'Observable<void>'.
für jeden beobachtbaren ich versuchen, zurück außer leereIch stellte fest, dass Sie nicht mit dem
res
parameter übergebenflatMap
. Wenn das tatsächlich der Fall ist, können Sie in Erwägung ziehen, die Rückkehr zuObservable<boolean>
(mit entsprechenden Logik-änderungen) anstelle des zurück-links, oder Beobachten<alle>.Re Ihrem letzten Kommentar, ich bin darauf hindeutet, Sie auch ändern Sie die andere
Observable<void>
zuObservable<any>
. Entschuldigt, wenn Sie bereits geändert haben, Sie beide.InformationsquelleAutor Richard Matsen
Einen beobachtbaren entspricht
Observable<void>
Typ istFührt vollständig beobachtbaren ohne Werte und ist ähnlich
Observable.empty()
.Während
ist falsch, da fehlt es abonnieren-Funktion argument. Es könnte sein, stattdessen:
Der Beitrag beantwortet die Frage direkt. Dies ist, wie
void
beobachtbaren zurückgegeben. Sie vielleicht dem problem, mit flatMap, aber dies bedeutet, dassObservable<void>
- Typ ist falsch. Die Art, wie es getan werden sollte, hängt davon ab, wie getModelDetail soll in Ihrem Fall zu arbeiten. Kann es seinreturn Observable.empty()
oder etwas anderes.Observable.of()
nicht emittieren eine einzige Undefinierte, ist es nicht emittieren nichts. Für die, die Sie wollenObservable.of(undefined)
.InformationsquelleAutor estus
können Sie bahaviour observablen. Sie haben einen anfänglichen Wert, und wenn Sie abonnieren, das Abonnement funktioniert auf, der Ausgangswert. also lassen Sie uns sagen, Sie wollen arbeiten auf einer neuen Instanz von Kunden, wenn die Dritte Bedingung wahr, so tun Sie dies:
`
`
so, jetzt, wenn Sie anrufen, subscribe () - an diese Methode sind, und dass Letzte block wird ausgeführt, Sie haben, was Sie wollten.
Sie können ändern
new customer()
um alles, was Sie wollen standardmäßig.InformationsquelleAutor Fatemeh Majd