2

我想根据 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);
    }
4

1 回答 1

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 和另一个应该在没有错误时传递的(未定义)(参见上面示例中的回调函数)。我不确定我在做什么是好的做法——对我来说似乎有点老套,所以我不会接受这个问题的答案(还)。

于 2013-09-06T15:37:01.457 回答