2015-02-07 83 views
3

請幫助我以下。如何在localStorage中像localForage一樣從localForage分配變量?

我一直在將我的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',但是我想讓它退出回調狀態以便在其餘服務中使用。

另外要注意,我在一個服務,所以不能分配給$範圍(除非我不知道如何)。

感謝任何幫助。

感謝 乙

+0

,如果你不想使用回調,爲什麼不使用sync localStorage? – dandavis 2015-02-07 23:44:23

+0

我很擔心本地存儲的大小限制。你知道我可以如何使用回調來設置一個我可以使用的變量嗎? – 2015-02-07 23:48:35

+0

回調通常帶有自己的變量,作爲形式參數傳遞。如果您發現自己希望將數據「移動」到現有變量,那麼您可能不會以異步方式處理該問題。你需要把動詞帶到名詞中,而不是動詞的名詞。你不會找到任何其他不是異步的大型存儲提供商,因此,花大筆時間來研究異步並找出如何使其適用於你。可能不是一個簡單的解決方法,但它是唯一正確的方法... – dandavis 2015-02-07 23:56:28

回答

0

LocalForage是設計異步,所以我會建議你使用像承諾建議@RouR。

代碼清晰度的一個小改進是鏈返回promise結果,但是你仍然無法避免異步代碼的後果。

$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'); 

如果使用的是巴貝爾,對於這樣的遷移更友好的方式將其配置爲使用transform-async-to-generatorpreset-es2017和改寫這樣的代碼爲

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