ebody: [[PromiseResult]]: undefined

problematische Seite

Hallo,

ich hatte hier gelesen:

Würde getData() so umgeschrieben, dass es als Rückgabewert ein Promise hätte, wäre die Nutzung davon einfach so: createAudioFileAsync(audiosettings).then(successCallback, failureCallback);

Jetzt wollte ich mit einer eigenen Funktion ausprobieren, wie ich ein Promise() zurückgeben kann. Soweit scheint es zu funktionieren.

Die Ausgabe des Promise Objekts...

console.dir(result);

... zeigt aber:

Promise

Warum ist [[PromiseResult]]: undefined?

Gruß ebody

  1. problematische Seite

    Hi,

    Die Ausgabe des Promise Objekts...

    console.dir(result);
    

    ... zeigt aber:

    Promise

    Warum ist [[PromiseResult]]: undefined?

    Vermutlich, weil irgendwas in dem Teil des Codes, den Du uns nicht zeigst (also in den versteckten 100%) nicht richtig ist.

    Aber wie gesagt, das ist nur eine Vermutung.

    cu,
    Andreas a/k/a MudGuard

    1. problematische Seite

      Hallo,

      Vermutlich, weil irgendwas in dem Teil des Codes, den Du uns nicht zeigst (also in den versteckten 100%) nicht richtig ist.

      Aber wie gesagt, das ist nur eine Vermutung.

      Ich vermute, dass in dem codepen, den ebody per „problematische Seite“ versteckt hat, wenigstens ein paar Prozente Codeteile von ihm sind.

      Aber das ist wiederum nur meine Vermutung

      Gruß
      Kalk

      1. problematische Seite

        Hallo Tabellenkalk,

        ah. Oh.

        Der Codepen liefert aber Daten - dort wird auch der responseText an resolve übergeben. Hat ebody vielleicht kürzlich geändert.

        Was dort aber fehlt: Abfrage auf einen erfolgreichen Request. Aus Sicht von XMLHttpRequest ist es nämlich absolut großartig, wenn der Server einen HTTP 500 Status zurückgibt. Das ist kein Error. Ein Error wäre nur, wenn er gar nicht antwortet.

        Pro Tipp an eBody: Die Funktion "getData" ist in dieser Form bereits in JavaScript eingebaut. Sie heißt "fetch" 😉

        Rolf

        --
        sumpsi - posui - obstruxi
      2. problematische Seite

        Hi,

        Ich vermute, dass in dem codepen, den ebody per „problematische Seite“ versteckt hat, wenigstens ein paar Prozente Codeteile von ihm sind.

        codepen ist für mich genausogut wie code gar nicht anzeigen. Da wird auf einer schwarzen Fläche irgendwas rechts oben in sehr dunkelgrau angezeigt. Nicht lesbar. Und ich hab dort nix gefunden, wo man vom Too-Low-Contrast-Mode auf was Lesbares umschalten könnte …
        Aber vielleicht ist der entsprechende Button ja auch nur Dunkelgrau auf Schwarz …

        cu,
        Andreas a/k/a MudGuard

        1. problematische Seite

          Hallo MudGuard,

          ja, das sind die DarkMode Fans mit den Gaming-Hochkontrastbildschirmen, auf denen man ohne DarkMode blind wird. Die haben jsFiddle ebenfalls verdorben. Und weil angeblich niemand den LightMode braucht, haben sie den Umschalter irgendwann entfernt. Aber dort komme ich etwas besser klar.

          Codepen ist gruselig, die PHP Sandbox ist ebenfalls grausam geworden.

          Rolf

          --
          sumpsi - posui - obstruxi
  2. problematische Seite

    Hallo ebody,

    weder zeigt die MDN, wie die Promise-Version von createAudioFileAsync aussehen würde, noch zeigst Du, wie deine Funktion aussieht.

    Wenn ein Promise festgelegt wird (egal ob erfüllt oder zurückgewiesen), bekommt es einen Wert.

    Das geht über mehrere Stufen:

    • Du rufst den Promise-Konstruktor auf (new Promise) und übergibst eine Funktion, die als Executor dient
    • Der Promise-Konstruktor ruft den Executor auf und übergibt zwei Funktionen, resolve und reject.
    • Der Executor leitet den asynchronen Vorgang ein und endet. Typischerweise registriert er dabei irgendwie und irgendwo eine Callbackfunktion, die vom Browser aufgerufen wird, sobald der asynchrone Vorgang endet oder abbricht.
    • Die Callbackfunktion benötigt Kenntnis von resolve und reject. Das passiert automatisch, wenn es eine Funktion ist, die lokal im Executor definiert wurde (siehe 'Closures'). Andernfalls musst Du dem Callback resolve und reject mit anderen sinnvollen Mitteln bereitstellen, deiner Kreativität ist keine Grenze gesetzt.
    • Sobald die Callbackfunktion läuft, entscheidet sie, ob das Promise erfüllt werden kann oder zurückgewiesen werden muss, und ruft dementsprechend resolve oder reject auf. Dabei übergibt sie ein Argument: an resolve den versprochenen Wert und an reject die Entschuldigung, warum das Versprechen nicht gehalten wurde.

    Wenn Du im [[PromiseResult]] ein undefined vorfindest, dann wurde sehr wahrscheinlich resolve ohne Argument aufgerufen. So, wie es im MDN Artikel passiert (der zu wenig auf den Erzeugungsteil von Promises eingeht).

    Rolf

    --
    sumpsi - posui - obstruxi