我想根据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);
}
答案 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,以及在没有错误时应该传递的另一个(未定义的)(参见上面示例中的回调函数)。我不确定我所做的是好的做法 - 对我来说似乎有些笨拙,所以我不会接受这个问题的回答(还)。