1

我正在使用localForage将数据存储为键对象对。我正在使用以下代码来检索我已经存储的数据。

// 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 并从这里获取了上面的代码片段获取了上面的代码片段。)

这不起作用,所以我console.log()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,所以它下面的for循环似乎永远不会被执行。但是,在加载网页后,如果我localforage.length();在 Chrome 开发人员工具控制台中手动输入,它会返回以下内容:

Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
__proto__:Promise
[[PromiseStatus]]:"resolved"
[[PromiseValue]]:2

这是有道理的,因为我目前存储了 2 个对象。那么为什么我的代码片段不起作用,为什么长度返回为null?我觉得这与我不熟悉的承诺有关。

4

1 回答 1

1

您是对的,localForage 是一个异步 API,因此它可以与回调或 Promises 一起使用。

您需要使用.thenafter从 promise 中提取值localforage.length

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

以下是 .length 的文档:http: //localforage.github.io/localForage/#data-api-length

于 2017-06-11T14:04:52.370 回答