Javascript 与工厂共享更新的变量(变量范围)

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);

我想通过工厂(Angularjs)共享更新的变量(从函数更新)

我有以下工厂:

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())时未定义它然后
实体
未更新。