在javascript异步回调函数之间传递参数
我想在这里使用execAsync函数: 我想在handleResult和handleCompletion之间传递值。差不多在javascript异步回调函数之间传递参数,javascript,asynchronous,firefox-addon,mozilla,gecko,Javascript,Asynchronous,Firefox Addon,Mozilla,Gecko,我想在这里使用execAsync函数: 我想在handleResult和handleCompletion之间传递值。差不多 statement.executeAsync({ handleResult: function(aResultSet) { VALUE = 1 }, handleCompletion: function(aReason) { print(VALUE); } }); 最好的方法是什么?需要注意的是,您正在将一个对象传递给executeAs
statement.executeAsync({
handleResult: function(aResultSet) {
VALUE = 1
},
handleCompletion: function(aReason) {
print(VALUE);
}
});
最好的方法是什么?需要注意的是,您正在将一个对象传递给executeAsync。(特别是,它是一个mozIStorageStatementCallback,因此它也应该有一个handleError方法。)因此,您可以使用“this”关键字轻松地将特定于该对象的属性与该对象关联:
var value;
statement.executeAsync({
handleResult : function(aResultSet) {
value = 1;
},
handleCompletion : function(aReason) {
print(value);
}
});
是的,我试过了,它不起作用。。。所以函数在短时间内执行多次,我希望它只运行一次代码,我通过设置一个全局标志来执行,但它不工作,我有这样的代码:
var value=0;executeAsync({handleResult:function(aResultSet){value=1;},handleCompletion:function(aReason){if(!value)do_something();}})
@Tony您是否尝试过警报
-ing或控制台。记录-ing值
以查看它是否以及何时发生变化?deceze的方法是实现您要求的最明显和最惯用的方法。您应该安装firebug并设置一些断点,以了解实际情况。我不认为deceze提供的模式会导致任何错误。nvm,我发现了问题。显然,旧版本的函数正在同时运行。。。它以某种方式改变了变量值。
statement.executeAsync({
value: 1,
handleResult: function(aResultSet) {
this.value = 0;
},
handleError: function(aError) {
this.value = 2;
},
handleCompletion: function(aReason) {
print(this.value);
}
});