Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript YDN-DB获取存储:null不存在_Javascript_Caching_Indexeddb_Ydn Db - Fatal编程技术网

Javascript YDN-DB获取存储:null不存在

Javascript YDN-DB获取存储:null不存在,javascript,caching,indexeddb,ydn-db,Javascript,Caching,Indexeddb,Ydn Db,我可以在将记录添加到存储区后验证它是否存在,但当我在另一个函数中并声明一个新变量以指向同一数据库、存储并执行查询时,我会收到以下错误消息 存储:null不存在 我用来检索数据的方法被复制到我添加记录的位置,只是为了确保它的语法正确并且在那里工作。但当我在另一个函数中时,它不再找到数据 下面是一些代码: 我的目标是跟踪缓存数据的时间,以便在数据过时时重新提取数据。“UpdateCache”方法似乎有效。记录对象填充了我期望的JSON对象 updateCacheAge = function (dbN

我可以在将记录添加到存储区后验证它是否存在,但当我在另一个函数中并声明一个新变量以指向同一数据库、存储并执行查询时,我会收到以下错误消息

存储:null不存在

我用来检索数据的方法被复制到我添加记录的位置,只是为了确保它的语法正确并且在那里工作。但当我在另一个函数中时,它不再找到数据

下面是一些代码:

我的目标是跟踪缓存数据的时间,以便在数据过时时重新提取数据。“UpdateCache”方法似乎有效。记录对象填充了我期望的JSON对象

updateCacheAge = function (dbName, cacheName) {
    // updates the mashCacheAge.  This helps track how old/stale a cache is.

    var cacheJSON = {
        id: cacheName,
        updatedDate: new Date().getTime()
    };

    mashDB = new ydn.db.Storage(dbName);

    mashDB.put({ name: 'mashCacheAge', keyPath: 'id' }, cacheJSON).done(function (key) {
        mashDB.executeSql('SELECT * FROM mashCacheAge WHERE id = \'' + cacheName + '\'').then(function (record) {
            $log.log('mashCacheAge record for: ' + cacheName);
            $log.log(record);
        });
    });


    $log.log(cacheName + ': mashCache was re-created.');
}
这是isStale函数。第一次通过时,我预计这可能会失败,因为缓存中没有任何内容。当发生这种情况时,我知道获取数据,然后更新缓存,以防止我返回数据库,直到缓存过时

我确信我的代码可以改进,但这是我解决问题的第一步。我遇到的问题是,我刚刚保存到mashCacheAge存储的数据不存在,错误消息似乎表明存储本身不存在

我是在做傻事吗

isStale = function (dbName, cacheName, minutes) {
    // db: is 'mashCache'
    // store: No store is provided but might be added later to remove constaint 'mashCacheAge'
    // subject: is the name of the cache being evaluated.
    // minutes: is the number of minutes before the cache is considered stale.

    var deferred = $q.defer();
    var result = true;

    // get milliseconds version of minutes.
    var ageToleranceMilliseconds = (minutes * 60) * 1000;
    var currentDateMilliseconds = new Date().getTime();

    isStaleMashDB = new ydn.db.Storage(dbName);

    try {
        isStaleMashDB.executeSql('SELECT * FROM mashCacheAge WHERE id = \'' + cacheName + '\'').then(function (record) {
            $log.log('mashCacheAge record for: ' + cacheName);
            $log.log(record);



            var durationMilliseconds = currentDateMilliseconds - record[0].updatedDate;

            // Check if the data is stale.
            if (durationMilliseconds > ageToleranceMilliseconds) {
                result = true;
            }
            else { result = false; }

            deferred.resolve(result);
        });
    }
    catch (e) { deferred.resolve(true); }
    return deferred.promise;
};

我找到了敌人,敌人就是我

我对这个库的最初实验成功了,我在模块的根目录中留下了那个实验的残余部分。我知道得更多,但我忘了,花了我几个小时的时间。我的错


我正在为我的YDN数据库重用一个“db”名称,这些名称相互冲突。但是JavaScript并没有向我抱怨。当我注释掉我最初的所有实验后,一切都按预期开始工作。

一个建议:您应该使用数据库模式来创建生产站点。看见