如何从IndexedDB提供变量

时间:2013-09-10 10:08:10

标签: javascript asynchronous indexeddb

我正在尝试使用内部存储IndexedDB浏览器,而不是localStorage。 我遇到了异步访问的几个问题。我希望将更多数据存储在多个对象库中,并使用数据库中的数据集进行处理。

举一个简单的例子,它可能是:

var product = getProductById('xxx');
var countryTax = getCountryTax('FR');
var storeDetailed = getStoreDetailed('xxx');
var productPrice = product.price * countryTax.Tax * storeDetailed.margin;

通过异步访问,它提供:

getProductById('xxx').onComplete = function (product) {
        getCountryTax('FR').onComplete = function (product, countryTax) {
              getStoreDetailed('xxx').onComplete =function(product, countryTax, storeDetailed) {
                   var productPrice = product.price * countryTax.Tax * storeDetailed.margin;
              }
         }
}

这听起来非常复杂,而且代码对存储方法具有很高的附着力。

几乎所有遇到的例子都会向html页面提供阅读基础的结果。

在我这边,我想提供变量并对数据进行处理。 请问你有什么想法。

1 个答案:

答案 0 :(得分:0)

您似乎只想使用闭包范围内的变量。这不是什么大问题,您可以轻松访问内部函数(如getProductById)中外部函数的变量(如getCountryTax)。

唯一的问题是,您在本地范围内定义了具有相同名称的变量。这些将具有优先级,并且将为undefined,除非它由调用者设置(即使在具有此名称的闭包范围中有指定的变量)。以下是您在示例中使用闭包范围变量的方法:

getProductById('xxx').onComplete = function (product) {
        getCountryTax('FR').onComplete = function (countryTax) { // removed product
              // here you can access product from closure and countryTax from local scope
              getStoreDetailed('xxx').onComplete = function(storeDetailed) { // removed arguments, too
                   // here you can access product and countryTax from closure
                   // and storeDetailed from local scope
                   var productPrice = product.price * countryTax.Tax * storeDetailed.margin;
              }
         }
}