5

请帮我解决以下问题。

我一直在将我的 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 (除非我不知道如何)。

感谢任何帮助。

谢谢乙

4

2 回答 2

0
$localForage.setItem('localSavedValue','SavedValue').then(function() {
        $localForage.getItem('localSavedValue').then(function(data) {
            console.log(data); 
        });
    });

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

于 2015-07-24T11:43:19.353 回答
0

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);
于 2017-10-31T12:00:42.733 回答