Ich versuche localForage Unterstützung des pure-form Web Component hinzufügen, indem Sie eine globale Instanz von localForage erstellen:Gibt es eine Möglichkeit zu überprüfen, ob eine JavaScript-Funktion einen Rückruf akzeptiert?
// create a global appStorage object that mimics localStorage API (greater storage)
window.appStorage = localforage.createInstance({
driver: [
localforage.INDEXEDDB,
localforage.WEBSQL,
localforage.LOCALSTORAGE
],
name: 'product-name',
version: 1.0,
storeName: 'app'
});
Und es zu einer Instanz von reiner Form über das storage
Attribut zuweisen:
<pure-form src="path-to-schema.json" storage="appStorage"></pure-form>
Intern führt pure-form window[self.storage]
aus, um eine Kennung für das Speicherobjekt abzurufen, und verwendet .getItem
, .setItem
, um Werte synchron festzulegen und abzurufen.
Problem ist localForage ist asynchron, dh .getItem
, .setItem
erwarten, Werte über einen Rückruf zurückgeben. Daher meine aktuelle Logik wird nicht funktionieren:
// get value from web storage
var storedContent = window[self.storage].getItem('item-key');
Ich weiß, ich könnte den Anruf in einem Versprechen wickeln, aber wie es rein Form steht nicht Versprechungen erfordern und ich würde es hassen, diese Abhängigkeit nur für diesen hinzufügen .
Was würde ich tun zu überprüfen, ob .getItem
oder .setItem
einen Rückruf benötigen, und wenn ja, ändern Sie den Code entsprechend ...
Sie überprüfen Die Dokumentation - es gibt keine Möglichkeit, dies zu erkennen, ohne die Quelle oder die Dokumentation zu betrachten. Das heißt, fast jeder asynchrone Anruf nimmt entweder einen Rückruf oder nutzt Versprechungen. –
Also, ich denke, die Alternative wäre, zu versuchen, festzustellen, ob der Speicher eine Instanz von localForage ist? Problem ist, das wird ein hart codierter Randfall –
Sie könnten prüfen, '.getItem.length' ist mehr als 1. Es gibt keine Garantie, dass der zusätzliche Parameter in der Funktionsdeklaration erscheint, aber wenn es tut, wird es mindestens 2 sein. – trincot