我可以将函数闭包(使用我的参数)作为Firebase的set()方法'oncomplete'参数传递吗?

时间:2013-09-06 14:27:53

标签: firebase

我想根据set()方法的成功或失败进行进一步处理,但是在调用set()方法时我需要一些对象的上下文。否则,当调用oncomplete函数时,我的对象将超出范围,除非我将它们放在全局中 - 我真的不想这样做。

以下是一个例子:

    function oncomplete_AddTran(tran,client,appt,balance){
      /* if named argument 'balance' exists it is safe to assume
         Firebase has not 'stepped on' the arguments with it's single
         Error object or null */
      if(balance typeof object) console.log("my parameters made it here");
    }
    function addTran(tran, client, appt, balance) {
    var TRANS_LOCATION = 'https://xxx.firebaseIO.com/testing/transactions';
    var tranListRef = new Firebase(TRANS_LOCATION);
    var oncomplete = function() {
         oncomplete_AddTran(tran, client, appt, balance); };
    var tranref = tranListRef.child(tran.name).set(tran.literal, oncomplete);
    }

1 个答案:

答案 0 :(得分:1)

是的,有可能。我太急于等待我正在寻找的确认,并决定自己测试。这是我使用的代码(适用于我的目的):

    function oncomplete_AddTran(tran,client,appt,balance){
      console.log("arguments passed:" + arguments.length);
      // firebase original arguments :: arguments.callee.caller.arguments
      var fbargs = arguments.callee.caller.arguments; 
    }
    function addTran(tran, client, appt, balance) {
      var TRANS_LOCATION = "https://xxx.firebaseIO.com/testing/transactions";
      var tranListRef = new Firebase(TRANS_LOCATION);
      var oncomplete = function() { 
                         oncomplete_AddTran(tran, client, appt, balance); };
      var tranref = tranListRef.child(tran.name).set(tran.literal, oncomplete);
    }
    function main() {
      var tran = {}; tran.name = "test1"; tran.literal = { tran: "tran" };
      var client = {}; client.literal = { client: "client" };
      var appt = {}; appt.literal = { appt:"appt" };
      var balance = {}; balance.literal = { balance:"balance" };
      addTran(tran,client,appt,balance);
    }

参数按预期传递但我仍然不知道Firebase的set()方法如何将错误对象传递给回调(如果发生错误),因为我没有尝试重现错误并且不要我真的知道我能不能。

在arguments.callee.caller.arguments中找不到默认的null,以及在没有错误时应该传递的另一个(未定义的)(参见上面示例中的回调函数)。我不确定我所做的是好的做法 - 对我来说似乎有些笨拙,所以我不会接受这个问题的回答(还)。