【问题标题】:How do I assign a variable from localForage as I do in localStorage?如何像在 localStorage 中一样从 localForage 分配变量?
【发布时间】:2015-02-07 23:40:19
【问题描述】:

请帮我解决以下问题。

我一直在将我的 AngularJS 应用程序从 localStorage 转换为 localForage。

在我的整个应用程序中,我都像这样分配 localStorage 值。

window.localStorage.setItem('localSavedValue','SavedValue');

然后我像这样检索数据,

var myValue = window.localStorage.getItem('localSavedValue');

所以当我 console.log(myValue); // 它输出'SavedValue'

我尝试使用 localForage 时似乎无法做到这一点,

$localForage.setItem('localSavedValue','SavedValue');
var myValue = $localForage.getItem('localSavedValue');
console.log(myValue); // returns an object.

我没有将值设置为 myValue。

我确信这与承诺有关,因为当我使用回调时,我可以访问正确的“myValue”,但是我想将它从回调中取出,以便在服务的其余部分中使用。

还要注意,我在服务中,因此无法分配给 $scope(除非我不知道如何分配)。

感谢任何帮助。

谢谢 乙

【问题讨论】:

  • 如果你不想使用回调,为什么不直接使用同步localStorage?
  • 我担心本地存储的大小限制。你知道我如何使用回调来设置我可以使用的变量吗?
  • 回调通常带有自己的变量,作为形式参数传递。如果您发现自己想要将数据“移动”到现有变量中,那么您可能不会以异步方式解决问题。您需要将动词带入名词,而不是将名词带入动词。您不会找到任何其他非异步的大型存储提供程序,因此重温异步并弄清楚如何使其为您工作需要付出很大的代价。可能不是一个简单的解决方案,但这是正确解决问题的唯一方法......
  • 非常感谢您的 cmets。我可以看到在回调中包装了我的服务,但是当我需要使用多个数据值时,我立即开始担心。
  • 您可以将整个调度/回调例程放在其他回调中。如果你正在做大量的事情,那么转换为承诺是值得的,但这需要更多的学习。简而言之,现在只需根据需要嵌套回调,直到它变得混乱,这很可能永远不会发生。

标签: javascript angularjs localforage


【解决方案1】:
$localForage.setItem('localSavedValue','SavedValue').then(function() {
        $localForage.getItem('localSavedValue').then(function(data) {
            console.log(data); 
        });
    });

https://github.com/ocombe/angular-localForage#configure-the-provider-

【讨论】:

    【解决方案2】:

    LocalForage 在设计上是异步的,所以我建议您使用 @RouR 建议的 Promises。

    代码清晰度的一个小改进是链式返回承诺结果,但您仍然无法避免异步代码后果。

    $localForage.setItem('localSavedValue','SavedValue').then(function() {
        return $localForage.getItem('localSavedValue');
    }).then(function(data) {
        console.log('I\'m printed second', data); 
    });
    console.log('I\'m printed first'); 
    

    如果你正在使用 Babel,对此类迁移更友好的方法是将其配置为使用 transform-async-to-generatorpreset-es2017 并将此类代码重写为

    await $localForage.setItem('localSavedValue','SavedValue');
    const data = await $localForage.getItem('localSavedValue');
    console.log(data);
    

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 2012-01-30
      • 2016-08-24
      相关资源
      最近更新 更多