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