Javascript 与工厂共享更新的变量(变量范围)
我想通过工厂(Angularjs)共享更新的变量(从函数更新) 我有以下工厂:Javascript 与工厂共享更新的变量(变量范围),javascript,angularjs,Javascript,Angularjs,我想通过工厂(Angularjs)共享更新的变量(从函数更新) 我有以下工厂: appTspSrv.factory('shared', function(db) { var entities; var getEntities = function(){ db.query('getEntities', function(err, doc) { if (err) { console.log(err);
appTspSrv.factory('shared', function(db) {
var entities;
var getEntities = function(){
db.query('getEntities', function(err, doc) {
if (err) {
console.log(err);
} else {
entities = doc.rows;
}
});
};
getEntities();
return {
getEntities: function() {
return entities;
}
}
});
当我从控制器调用工厂函数时,我得到“未定义”:
console.log(shared.getEntities());
这是为什么?我该如何解决这一问题?我假设db.query是异步的,您正在调用
shared.getEntities
,然后它才有机会返回并更新entities
@DylanWatt shared.getEntities是异步的,在更新entities之后我不会调用它。。。奇怪的行为是,如果我在声明时将实体设置为某个值,那么getEntities将返回该值。确保getEntities();有效,我在设置entities=doc.rows时放了一个console.log();在调用共享函数之前得到它!就像是两个分离的变量。。。一个在函数内部,另一个在函数外部!请注意,当我使用async函数打印实体时,它是正确的(我还尝试在异步函数上应用$apply,但没有成功…@ncohen您可以提供plunker吗?@ncohen,无论如何,如果在调用console.log(shared.getEntities())时未定义它代码>然后实体
未更新。