在js中正确使用Promise

时间:2017-06-15 14:58:04

标签: javascript cordova

我对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")
...

但这不起作用。

这样做的正确方法是什么?

3 个答案:

答案 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));