我对javascript很新,似乎无法自己解决这个问题: 我想在我的Cordova项目中使用一个处理存储的插件。 基本上,我想要这个:
if(localStorage.getItem('download_quality')=="4k")
将替换为本机存储插件。 数据通过以下方式存储:
this.nativeStorage.setItem('download_quality',"4k")
.then(
() => console.log('Stored item!'),
error => console.error('Error storing item', error)
);
根据文档,我应该使用:
this.nativeStorage.getItem('download_quality').then(
data => console.log(data),
error => console.error(error)
);
这很好用,但我如何在if语句中使用它?
我试过了:
var test = this.nativeStorage.getItem('download_quality').then(
data => {return data},
error => console.error(error)
);
if(test=="4k")
...
但这不起作用。
这样做的正确方法是什么?
答案 0 :(得分:2)
你应该采取的方式是承诺,在你的内心做你的东西。
this.nativeStorage.getItem('download_quality').then(
data => {
if (data === '4k') {
// do something
}
},
error => console.error(error)
);
答案 1 :(得分:1)
使用ES7
async yourMethod() {
try {
const data = await this.nativeStorage.getItem('download_quality');
if (data === '4k') {
// do something
}
} catch(e) {
console.log(e);
}
}
答案 2 :(得分:0)
您对test
的作业实际上是对Promise
的引用。由于您将访问本机存储,因此该访问将以异步方式完成。 Promise
只是未来结果的表示。
您需要将if语句放在将在解析promise时调用的函数中。该函数将接收getItem
返回的数据,然后您可以随意执行任何操作。
像:
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));