获取新元素的关键

时间:2015-03-14 23:39:10

标签: angularjs asynchronous firebase angularfire

我有service这个函数:

this.addSubject = function(categId, data){      
 $firebase(url.child('discussions').child(categId)).$push(data).then(function (newChildRef) {
    console.log("added record with id " + newChildRef.key());
    });      
};

我在Controller中调用该函数。但我希望恢复新的ID newChildRef.key(),以便在我的Controller中使用它。但如果我回来,就什么都没有。

有没有办法保存这个id

或者可以在此功能中调用我服务的其他功能吗?

1 个答案:

答案 0 :(得分:1)

您无法从这些功能返回,因为它们是承诺合同的一部分,并且将来会异步发生。你必须做的是让你的函数调用控制器中的方法来告诉它加载的密钥。然后控制器可以响应,UI将跟随。你如何让你的功能知道在哪里打电话?

让控制器向服务中传递服务应该在结果已知时调用的函数。

e.g。

var target = function(id) { // processes id
};

// call the function in your service passing the receiving function
service.addSubject('catid', 'data', target);

并且您的服务需要接收该功能并使用它执行某些操作

this.addSubject = function(categId, data, callback){
$firebase(url.child('discussions').child(categId)).$push(data).then(function (newChildRef) {
    console.log("added record with id " + newChildRef.key());

    // send to the callback
    callback(newChildRef.key());
  });      
};