2017-06-11 13 views
0

私はlocalForageを使用してキーとオブジェクトのペアとしてデータを格納しています。私は既に保存したデータを取得するために次のコードを使用しています。Javascript LocalForageの長さをNULLに戻す

// Find the number of items in the datastore. 
localforage.length(function(length) { 
    // Loop over each of the items. 
    for (var i = 0; i < length; i++) { 
     // Get the key. 
     localforage.key(i, function(key) { 
      // Retrieve the data. 
       localforage.getItem(key, function(value){ 
        //do stuff 
       }); 
     }); 
    } 
}); 

(私はlocalforage知ったとhereから上記のコードスニペットを取った。)

これは働いていませんでしたので、localforage.length()

// Find the number of items in the datastore. 
    localforage.length(function(length) { 
     console.log(length); 
     // Loop over each of the items. 
     for (var i = 0; i < length; i++) { 
      // Get the key. 
      localforage.key(i, function(key) { 
       // Retrieve the data. 
        localforage.getItem(key, function(value) 
         //do stuff 
        }); 
      }); 
     } 
    }); 

console.log(length)nullを与える判明した後、私はconsole.log()を置きますので、その下のforループは決して実行されないようです。しかし、私は手動でクローム開発ツールのコンソールでlocalforage.length();を入力した場合、Webページをロードした後、それは次の値を返します。

私は現在保存されている2つのオブジェクトを持っているように理にかなって
Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined} 
__proto__:Promise 
[[PromiseStatus]]:"resolved" 
[[PromiseValue]]:2 

。では、コードスニペットが機能しない理由と長さがnullと返される理由は何ですか?私はこれが私がよく知らない約束と関係があると感じています。

答えて

0

あなたは正しいですが、localForageは非同期APIであるため、コールバックまたはプロミスと共に動作します。あなたがここlocalforage.length

localforage.length().then(function(length) { .....

.thenを使用して約束から値を抽出する必要が

は.LENGTHのためのドキュメントも同様です:http://localforage.github.io/localForage/#data-api-length

+0

'.LENGTH()'関数文書化されているように、しかし、コールバックを許可します。 APIはどちらのメカニズムもサポートしています。 – Pointy

+0

@Pointy私の考え。 – AZG

+0

答えが私の問題を解決しました。 – AZG

関連する問題