Rolf B: try/catch - warum wird throw new Error() nicht ausgeführt und ist das die richtige Art, zurückzugeben was genau falsch ist?

Beitrag lesen

Hallo 1unitedpower,

lass uns aber einfach annehmen, dass es eine escape-Funktion für JavaScript gäbe,

nein, lass uns das nicht tun. Es gibt nämlich eine Funktion dieses Namens, aber sie escaped für URIs und nicht für HTML.

Man könnte:

  • mit movie.replace(/<>&/g, (match) => ...) die drei kritischen Zeichen ersetzen
  • das auch mit drei Replace tun, die nacheinander <, > und & durch &lt; &gt; und &amp; ersetzen

Oder man nutzt aus, dass man einen Browser hat: man erzeugt ein temporäres li-Element erzeugen, weist dem den Text als textContent zu und liest das outerHTML wieder aus. Solange man das li nicht ins DOM hängt, fliegt es danach automatisch in den Orkus.

let tempElem = document.createElement("li");
return movies.map(movie => {
                              tempElem.textContent = movie;
                              return tempElem.outerHTML;
                           });

Das kann man auch mit einem Kommaausdruck statt geschweifter Klammern lösen, aber das finde ich ziemlich schlecht lesbar.

createList(movies).then().catch()

Kann man machen, aber dann muss man auch dringend auf das Timing achten. Ein Promise erzeugt immer einen Eintrag in der Microtask-Queue, d.h. der Code im then läuft nie synchron, auch dann nicht, wenn in der async-Funktion keine wirkliche Asynchronität besteht. Mit await statt then kapselt man das besser, man behält auch in Methoden das this, ohne sich Mühe geben zu müssen. Ich bezweifle aber schon, dass eine Promise-Konstruktion für die Parametervalidierung von Funktionen/Methoden tatsächlich empfehlenswert ist.

Rolf

--
sumpsi - posui - obstruxi