0

Ich habe eine lokale Klasse in einer JavaScript-Datei mit folgendem Inhalt erstellt:Wie erhalten Sie Chrome-Speicherwerte über die lokale Getter-Setter-Klasse?

class CustomChromeStorage { 
    //#region userName 
    get userName() { 

     let isCurrentValueSet = false; 
     chrome.storage.sync.get('userName', function (obj) { 
      this._userName = obj; 
      isCurrentValueSet = true; 
     }); 
     while (true) { 
      if (isCurrentValueSet) { 
       return this._userName; 
      } 
     } 
    } 

    set userName(newValue) { 
     this._userName = newValue; 
     chrome.storage.sync.set({ 'userName': newValue }, function() { 
     }); 
    } 
    remove_userName() { 
     this._userName = null; 
     chrome.storage.sync.remove('userName', function() { 
     }); 
    } 
    //#endregion userName 

Meine Idee dieser Art von Code zu tun, wenn ich woanders wie in meinem Code schreiben:

alert(new CustomChromeStorage().userName); 

Dann Mein Code holt einfach den Benutzernamen aus dem Chrome-Speicher und zeigt ihn über eine Warnung an. Um einen Wert aus dem Chrom-Speicher zu holen, müssen wir einen Callback als Parameter bereitstellen. Ich weiß, dass dies eine gute Methode für den asynchronen Prozess ist, aber es wird manchmal mühsam für mich, alle Rückrufe zu verarbeiten.

Ich möchte, dass ich Wert aus Chrom-Speicher über meine benutzerdefinierte Klasse abrufen, um den aktuellen Code asynchron auszuführen. Deshalb habe ich unendliche While-Schleife in Getter-Methode dieser Eigenschaft geschrieben, aber das Problem ist, wenn ich versuche, Benutzername über benutzerdefinierte Chrom-Speicher-Klasse zu warnen meine gesamte Programmausführung wird hängen.

Der Grund dafür ist, dass ich zunächst isCurrentValueSet = false gesetzt habe, was nie innerhalb der while-Schleife wahr wird.

Wenn jemand eine Idee hat, warum es nicht auf wahr innerhalb der while-Schleife festgelegt wird, dann lass es mich wissen.

Antwort

2

Die von sync.get zurückgegebene Obj ist {userName: value} - benutze obj.userName.

Der Grund isCurrentValueSet wird nicht auf True gesetzt, weil die Funktion asynchron ist - wenn der Callback ausgeführt wird, hat er keinen Zugriff auf die Klassenvariable isCurrentValueSet.

Was Sie erreichen wollen, ist einfach falsch. Es ist eine Tatsache, dass Speicheranforderungen für die Benutzer- und Browserleistung asynchron sind. Sie müssen lernen, um es herum zu entwerfen, und es ist einfach genug, wenn Sie sich daran gewöhnen.

können Sie mehrere Variablen in einem Treffer abrufen also, wenn Sie einen Abschnitt von Code, der mehrere Variablen müssen, gehen Sie nur:

chrome.storage.sync.get({a:"",b:"",c:0,d:[]}, function(result) { 
    a = result.a 
    b = result.b 
    c = result.c 
    d = result.d 
    your code 
}); 

Mit dem Passieren eines Objekts in können Sie mehrere Variablen anfordern und definieren Standardwerte für, wenn sie noch nicht im Speicher vorhanden sind. Natürlich haben Sie nicht , um die Variablen zu extrahieren.

Verwandte Themen