Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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在函数中承诺$q_Javascript_Angularjs_Indexeddb - Fatal编程技术网

JavaScript作用域或AngularJS在函数中承诺$q

JavaScript作用域或AngularJS在函数中承诺$q,javascript,angularjs,indexeddb,Javascript,Angularjs,Indexeddb,我对JS函数和/或Angularjs promise和$q的范围有问题。我查了一些例子,但一点也不懂 在我的应用程序中,我在浏览器的indexeddb中保存了一些数据。前端有一个带有自动完成功能的输入字段。输入字段的值进入我的angularjs控制器并调用一个函数。函数应该返回找到的值。从indexeddb中查找值的逻辑运行良好 问题是我在将值推入数组之前返回数组。因此,我不确定是否需要更改JavaScript范围中的某些内容,或者使用Angularjs内容 这是我的控制器: var Auto

我对JS函数和/或Angularjs promise和$q的范围有问题。我查了一些例子,但一点也不懂

在我的应用程序中,我在浏览器的indexeddb中保存了一些数据。前端有一个带有自动完成功能的输入字段。输入字段的值进入我的angularjs控制器并调用一个函数。函数应该返回找到的值。从indexeddb中查找值的逻辑运行良好

问题是我在将值推入数组之前返回数组。因此,我不确定是否需要更改JavaScript范围中的某些内容,或者使用Angularjs内容

这是我的控制器:

 var AutocompleteController = function($scope, $http, $q) {

 $scope.getCodeFromDB = function(val) {
        var codes = [];
            var openDbRequest = indexedDB.open('testDb', 1);

            openDbRequest.onsuccess = function (e) {
                var db = e.target.result;
                var transaction = db.transaction("codeobjekt");

                transaction.objectStore("codeobjekt")
                    .openCursor(IDBKeyRange.bound(val, val + '\uffff'))
                    .onsuccess = function (e) {
                    var cursor = e.target.result;
                    if (cursor) {
                        codes.push(cursor.value.code); //gets filled
                        console.log(cursor.value.code);
                        cursor.continue();
                    }
                };
            };

        console.log(codes); //is empty
        return codes;
    };
};

提前感谢。

在代码中,您尝试使用返回后填充的数组

尝试使用angular提供的$q服务,就像这样

var AutocompleteController = function($scope, $http, $q) {

    $scope.getCodeFromDB = function(val) {
        var def= $q.defer(),
            codes = [],
        openDbRequest = indexedDB.open('testDb', 1);

        openDbRequest.onsuccess = function (e) {
        var db = e.target.result;
            var transaction = db.transaction("codeobjekt");

            transaction.objectStore("codeobjekt")
                .openCursor(IDBKeyRange.bound(val, val + '\uffff'))
                .onsuccess = function (e) {
                var cursor = e.target.result;
                if (cursor) {
                    codes.push(cursor.value.code); //gets filled
                    console.log(cursor.value.code);
                    cursor.continue();
                }
                else {
                    //cursor end
                    def.resolve(codes);
                }

            };
        };

        return def.promise;
    };
};
以及用法

//usage

$scope.getCodeFromDB("value")
.then(function(codes) {
    //codes filled
});

在代码中,您尝试使用返回后填充的数组

尝试使用angular提供的$q服务,就像这样

var AutocompleteController = function($scope, $http, $q) {

    $scope.getCodeFromDB = function(val) {
        var def= $q.defer(),
            codes = [],
        openDbRequest = indexedDB.open('testDb', 1);

        openDbRequest.onsuccess = function (e) {
        var db = e.target.result;
            var transaction = db.transaction("codeobjekt");

            transaction.objectStore("codeobjekt")
                .openCursor(IDBKeyRange.bound(val, val + '\uffff'))
                .onsuccess = function (e) {
                var cursor = e.target.result;
                if (cursor) {
                    codes.push(cursor.value.code); //gets filled
                    console.log(cursor.value.code);
                    cursor.continue();
                }
                else {
                    //cursor end
                    def.resolve(codes);
                }

            };
        };

        return def.promise;
    };
};
以及用法

//usage

$scope.getCodeFromDB("value")
.then(function(codes) {
    //codes filled
});

在代码中,您尝试使用返回后填充的数组

尝试使用angular提供的$q服务,就像这样

var AutocompleteController = function($scope, $http, $q) {

    $scope.getCodeFromDB = function(val) {
        var def= $q.defer(),
            codes = [],
        openDbRequest = indexedDB.open('testDb', 1);

        openDbRequest.onsuccess = function (e) {
        var db = e.target.result;
            var transaction = db.transaction("codeobjekt");

            transaction.objectStore("codeobjekt")
                .openCursor(IDBKeyRange.bound(val, val + '\uffff'))
                .onsuccess = function (e) {
                var cursor = e.target.result;
                if (cursor) {
                    codes.push(cursor.value.code); //gets filled
                    console.log(cursor.value.code);
                    cursor.continue();
                }
                else {
                    //cursor end
                    def.resolve(codes);
                }

            };
        };

        return def.promise;
    };
};
以及用法

//usage

$scope.getCodeFromDB("value")
.then(function(codes) {
    //codes filled
});

在代码中,您尝试使用返回后填充的数组

尝试使用angular提供的$q服务,就像这样

var AutocompleteController = function($scope, $http, $q) {

    $scope.getCodeFromDB = function(val) {
        var def= $q.defer(),
            codes = [],
        openDbRequest = indexedDB.open('testDb', 1);

        openDbRequest.onsuccess = function (e) {
        var db = e.target.result;
            var transaction = db.transaction("codeobjekt");

            transaction.objectStore("codeobjekt")
                .openCursor(IDBKeyRange.bound(val, val + '\uffff'))
                .onsuccess = function (e) {
                var cursor = e.target.result;
                if (cursor) {
                    codes.push(cursor.value.code); //gets filled
                    console.log(cursor.value.code);
                    cursor.continue();
                }
                else {
                    //cursor end
                    def.resolve(codes);
                }

            };
        };

        return def.promise;
    };
};
以及用法

//usage

$scope.getCodeFromDB("value")
.then(function(codes) {
    //codes filled
});

谢谢你的解决方案。这个很好用。关于
用法的一个问题
:应该在哪里编写此代码?在服役?我需要代码吗?如果需要在代码中使用getCodeFromDB并对加载的数据进行处理,则需要使用它。但是,如果您从视图中调用该函数,则它是无用的。谢谢!谢谢你的解决方案。这个很好用。关于
用法的一个问题
:应该在哪里编写此代码?在服役?我需要代码吗?如果需要在代码中使用getCodeFromDB并对加载的数据进行处理,则需要使用它。但是,如果您从视图中调用该函数,则它是无用的。谢谢!谢谢你的解决方案。这个很好用。关于
用法的一个问题
:应该在哪里编写此代码?在服役?我需要代码吗?如果需要在代码中使用getCodeFromDB并对加载的数据进行处理,则需要使用它。但是,如果您从视图中调用该函数,则它是无用的。谢谢!谢谢你的解决方案。这个很好用。关于
用法的一个问题
:应该在哪里编写此代码?在服役?我需要代码吗?如果需要在代码中使用getCodeFromDB并对加载的数据进行处理,则需要使用它。但是,如果您从视图中调用该函数,则它是无用的。谢谢!