Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 承诺在angularjs中不为IndexedDB工作_Javascript_Angularjs_Indexeddb_Angular Promise - Fatal编程技术网

Javascript 承诺在angularjs中不为IndexedDB工作

Javascript 承诺在angularjs中不为IndexedDB工作,javascript,angularjs,indexeddb,angular-promise,Javascript,Angularjs,Indexeddb,Angular Promise,我有一个使用IndexedDB的应用程序。最初我大量使用回调,并决定使用angularjs promises$q清理回调 失败 这把小提琴表明了我的期望 创建的任何数据库都将被删除。 然后 数据库已打开,需要触发ONUPGRADE 然后 数据库被引用 不幸的是,thenstations似乎在IDB调用的onsuccess方法中解析承诺之前被调用 要重新创建,请在控制台打开的情况下运行JSFIDLE。可能需要运行它几次才能获得异常,但它失败的次数最多,因为在调用数据库open上的onsucces

我有一个使用IndexedDB的应用程序。最初我大量使用回调,并决定使用angularjs promises
$q
清理回调

失败

这把小提琴表明了我的期望

  • 创建的任何数据库都将被删除。 然后
  • 数据库已打开,需要触发ONUPGRADE 然后
  • 数据库被引用
  • 不幸的是,
    then
    stations似乎在IDB调用的onsuccess方法中解析承诺之前被调用

    要重新创建,请在控制台打开的情况下运行JSFIDLE。可能需要运行它几次才能获得异常,但它失败的次数最多,因为在调用数据库open上的onsuccess之前调用了last then子句


    有什么想法吗?

    我认为问题在于承诺链。Angular的文档有点混乱,但似乎回调方法的返回值是一个承诺,它将使用一个值进行解析;不是承诺。因此,打破了链条

    发件人:

    然后(successCallback、errorCallback、notifyCallback)
    –不管 当承诺被或将被解决或拒绝时,则调用一个 一旦结果出现,成功或错误的消息将立即异步回调 有空。调用回调时使用一个参数: 结果或拒绝原因。此外,通知回调可能是 调用零次或多次以提供进度指示,然后 承诺被解决或拒绝

    此方法返回一个新的承诺,该承诺通过 successCallback的返回值errorCallback(除非 价值是一种承诺,在这种情况下,它与 在该承诺中解决(使用)。它还通知 通过notifyCallback方法的返回值。承诺是不可能的 无法从notifyCallback方法中解析或拒绝

    我可以使用以下命令对其进行初始化:

    angular.module('IDBTest')
        .run(['initSvc', function (initSvc) {
        initSvc.deleteDB()
            .then(function() {
                return initSvc.open('testDatabase');
            })
            .then(function () {
                console.log(initSvc.db.name + ' initialized');
            });
    }]);
    

    这有帮助是的,确实有帮助。谢谢我需要找到一个图腾。
    angular.module('IDBTest')
        .run(['initSvc', function (initSvc) {
        initSvc.deleteDB()
            .then(function() {
                return initSvc.open('testDatabase');
            })
            .then(function () {
                console.log(initSvc.db.name + ' initialized');
            });
    }]);