dedlfix: modale Fenster

Beitrag lesen

Tach!

Als Fortsetzung bietet sich an, über Promises nachzudenken.

Aber ja, das Thema liegt hier definitiv auf der Hand. Sobald ich mehr davon verstehe und wieder mehr Zeit habe, werde ich mir eine passende Ergänzung überlegen.

Als Tipp für den Einstieg: Meiner Erfahrung nach sollte man sich dem Thema Promises von zwei Seiten her nähern. Zum einen als Verwender und das ist der einfache Teil. Die meisten werden nur mit so etwas in Berührung kommen:

dialog.open(parameters)
  .then(result => ...)
  .catch(error => ...);

Wenn man damit klarkommt (man kann das zum Beispiel mit der Fetch-API üben), kommt die andere Seite dran, ein Promise zu erstellen.

function start () {
  return new Promise((resolve, reject) => {
    if (window.confirm('Ja/Nein')) {
      resolve(42);
    } else {
      reject(0);
    }
  });
}

start()
  .then(result => {
    console.log('Die Antwort ist', result);
  })
  .catch(error => {
    console.log('Abgebrochen');
  });

Sieht auch noch easy aus, aber wir müssen ja die Steuerung unverrichteter Dinge zurückgeben und bekommen das Zepter nur aufgrund von Events oder ähnlichem wieder, um das Promise erfüllen oder zurückweisen zu können. Das müssen wir dann etwas schachteln, damit wir eine Closure bekommen, die und das resolve und reject festhält. Das sieht dem Prinzip nach so aus:

function start () {
  return new Promise((resolve, reject) => {
    ok_button.addEventListener('click', () => {
      resolve(42);
    });

    cancel_button.addEventListener('click', () => {
      reject(0);
    });

    dialog.open();
  });
}

start()
  .then(result => {
    console.log('Die Antwort ist', result);
  })
  .catch(error => {
    console.log('Abgebrochen');
  });

dedlfix.

0 48

modale Fenster

JSKid
  • javascript
  1. 0
    Christian Kruse
  2. 0
    dedlfix
    1. 0
      JSKid
      1. 0
        Auge
        • html
        • javascript
        • programmiertechnik
        1. 0
          JSKid
          1. 0
            dedlfix
          2. 0
            Auge
          3. 0
            Felix Riesterer
      2. 0
        dedlfix
  3. 4
    Felix Riesterer
    1. 0
      Matthias Scharwies
    2. 1
      JürgenB
      1. 1
        Christian Kruse
        1. 1
          JürgenB
          1. 0
            Christian Kruse
            1. 0
              Felix Riesterer
              1. 0
                Felix Riesterer
          2. 0
            Felix Riesterer
            1. 0
              Christian Kruse
      2. 0
        Felix Riesterer
        1. 0
          JürgenB
          1. 0
            dedlfix
            1. 0
              JürgenB
    3. 1
      dedlfix
      1. 0
        Felix Riesterer
        1. 0
          dedlfix
          1. 0
            Felix Riesterer
            1. 0
              dedlfix
              1. 0
                Felix Riesterer
                1. 0
                  dedlfix
                  1. 0
                    Felix Riesterer
                    1. 1
                      Felix Riesterer
    4. 0
      1unitedpower
      1. 0
        JürgenB
      2. 0
        Felix Riesterer
        1. 1
          1unitedpower
          1. 0
            JürgenB
            1. 0
              1unitedpower
          2. 0
            Felix Riesterer
            1. 0
              1unitedpower
    5. 0
      Felix Riesterer
      1. 0
        dedlfix
        1. 0
          Felix Riesterer
          1. 1
            dedlfix
            1. 0
              Felix Riesterer
              1. 0
                dedlfix
              2. 1
                dedlfix