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.

Zurück zu Mission 4: Nächste Schritte vorbereiten