Hinweis 04-2: try und catch
Stufe 1 zuerst lesen, dann selbst probieren. Die nächste Stufe erst, wenn du nach zwei Versuchen feststeckst.
Stufe 1: Denkfrage
api.createDraft gibt ein Promise zurück: ein Versprechen auf ein späteres Ergebnis.
Wenn das Versprechen bricht (Fehler), wo landet dieser Fehler, wenn du ihn nicht auffängst?
Öffne die Browserkonsole und probiere es aus.
Stufe 2: Teilbeispiel
const requestDraft = async () => {
setState({ kind: "loading" });
try {
const response = await api.createDraft({ leadId: lead.id, company: lead.company, contactName: lead.contactName, notes }, token);
setState(response.draft.trim().length === 0 ? { kind: "empty" } : { kind: "draft", draft: response.draft });
} catch (error) {
setState(describeError(error));
}
};
Stufe 3: Konkrete Erklärung
describeError ist eine kleine Funktion, die aus dem Fehler einen Zustand macht:
if (error instanceof ApiError) und dann nach error.kind unterscheiden: "unauthorized"
wird { kind: "unauthorized" }, "server" und "timeout" werden { kind: "error", message: "..." }.
Alles andere ist ein unerwarteter Fehler mit allgemeiner Meldung. Die leere Antwort ist
kein Fehler, deshalb steht ihre Prüfung im try, nicht im catch. Schreib die Meldungen
so, dass eine Person ohne Technikwissen weiss, was sie tun kann.