Zweifel an der HTML5 IndexedDB Async API

Lesezeit: 1 Minute

Zweifel an der HTML5 IndexedDB Async API
Jörg Horstmann

Beim Lesen der HTML5 IndexedDB-Spezifikation Ich hatte einige Zweifel an seinem asynchronen Anforderungsmodell. Beim Betrachten der API-Beispiel anfordernder open -Methode wird verwendet, um eine asynchrone Anforderung zu starten.

var request = indexedDB.open('AddressBook', 'Address Book');
request.onsuccess = function(evt) {...};
request.onerror = function(evt) {...};

Zum Zeitpunkt des Starts dieser Anfrage sind noch keine Event-Handler definiert.

  • Ist das nicht eine Race Condition?
  • Was passiert, wenn die open -Methode erfolgreich ist, bevor der Javascript-Interpreter die Zuweisung an ausführt onsuccess?
  • Oder wird die Anfrage erst wirklich gestartet, wenn beide Callbacks registriert sind?

Meiner Meinung nach wäre eine API wie die folgende viel logischer:

db.open('AddressBook', 'Address Book', {
    onsuccess: function(e) { ... },
    onerror  : function(e) { ... }
});

Es wird keine Race-Bedingung geben, da die JavaScript-Engine die Ausführung des tatsächlichen Bereichs (Funktion) abschließt und dann einen Callback oder Event-Handler auslöst. Lesen Sie Folgendes Kommentar auf Mozilla-Hacks.

  • Guter Fund, die zu suchenden Schlüsselwörter scheinen “bis zum Ende ausgeführt” zu sein. Das erklärt, warum der Code ohne Rennen funktioniert, aber ich denke immer noch, dass es ein Zeichen für schlechtes API-Design ist.

    – Jörn Horstmann

    13. April 2011 um 19:18 Uhr

  • Gibt es Möglichkeiten, es aufzuschieben, damit man die Anfrage in der Entwicklerkonsole öffnen und dann ausführen kann, nachdem man die Callbacks definiert hat? Oder die Rückrufe definieren und dann die Anfrage öffnen?

    – allo

    5. Februar um 11:36 Uhr

995020cookie-checkZweifel an der HTML5 IndexedDB Async API

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy