Antwort an „dedlfix“ verfassen

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.

freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

abbrechen