2017-06-15 1 views
0

Ich bin ziemlich neu in Javascript, und kann nicht scheinen, diese selbst herauszufinden: Ich möchte ein Plugin in meinem Cordova-Projekt verwenden, die Speicher behandelt. Grundsätzlich , ich möchte dies:Korrekte Verwendung von Promise in js

if(localStorage.getItem('download_quality')=="4k") 

durch eine native Speicher Plugin ersetzt werden. Daten werden gespeichert über:

this.nativeStorage.setItem('download_quality',"4k") 
     .then(
     () => console.log('Stored item!'), 
     error => console.error('Error storing item', error) 
    ); 

Nach dem docs, soll ich verwenden:

this.nativeStorage.getItem('download_quality').then(
    data => console.log(data), 
    error => console.error(error) 
); 

Dies funktioniert gut, aber wie kann ich dies in einer if-Anweisung?

Ich habe versucht:

var test = this.nativeStorage.getItem('download_quality').then(
      data => {return data}, 
      error => console.error(error) 
     ); 
if(test=="4k") 
... 

aber das funktioniert nicht.

Was ist der richtige Weg, dies zu tun?

Antwort

2

Die Art und Weise, wie Sie dies angehen sollten, ist in der vielversprechenden Weise, tun Sie Ihre Sachen drin.

this.nativeStorage.getItem('download_quality').then(
    data => { 
    if (data === '4k') { 
     // do something 
    } 
    }, 
    error => console.error(error) 
); 
0

Ihre Zuordnung zu test ist eigentlich ein Verweis auf die Promise. Da Sie auf den nativen Speicher zugreifen, erfolgt dieser Zugriff asynchron. A Promise ist nur eine Darstellung eines zukünftigen Ergebnisses.

Sie müssen die if-Anweisung in eine Funktion einfügen, die aufgerufen wird, wenn die Verheißung aufgelöst wird. Diese Funktion empfängt die Daten, die von getItem zurückgegeben werden, und dann können Sie damit machen, was Sie wollen.

Like:

function checkDownloadQuality (downloadQuality) { 
    if (downloadQuality === "4k") { 
    // do something 
    } 
} 
this.nativeStorage.getItem('download_quality').then(
    data => checkDownloadQuality(data), 
    error => console.error(error) 
); 
// or if the nativeStorage API support it: 
this.nativeStorage.getItem('download_quality') 
    .then(checkDownloadQuality) 
    .catch(error => console.error(error)); 
1

ES7 Mit

async yourMethod() { 
    try { 
     const data = await this.nativeStorage.getItem('download_quality'); 
     if (data === '4k') { 
      // do something 
     } 
    } catch(e) { 
     console.log(e); 
    } 
}