2011-02-03 4 views
1

Я хочу использовать функцию execAsync здесь: https://developer.mozilla.org/en/Storage#AsynchronouslyПопутные параметры между яваскриптом асинхронных функциями обратного вызова

, и я хочу передать значения между handleResult и handleCompletion. Что-то вроде

statement.executeAsync({ 
    handleResult: function(aResultSet) { 
    VALUE = 1 
    }, 

    handleCompletion: function(aReason) { 
    print(VALUE); 
    } 
}); 

Каков наилучший способ сделать это?

ответ

3
var value; 

statement.executeAsync({ 
    handleResult : function(aResultSet) { 
    value = 1; 
    }, 
    handleCompletion : function(aReason) { 
    print(value); 
    } 
}); 
+0

Я. Я попробовал это, он не работает ... , поэтому функция запускается несколько раз за короткий период времени, я хочу, чтобы она запускала некоторый код только один раз, я делаю это, установив глобальный флаг, но он не работает –

+0

У меня есть что-то например: 'var value = 0; statement.executeAsync ({ handleResult: функция (aResultSet) { значение = 1;} , handleCompletion: функция (aReason) { , если (значение) do_something();} }); ' –

+0

@ Тони Пробовали ли вы 'alert'-ing или' console.log'-ging 'значение', чтобы увидеть, действительно ли и когда оно действительно изменяется? – deceze

0

Хорошо, что следует заметить, что вы передаете объект executeAsync. (В частности, это mozIStorageStatementCallback, поэтому он должен иметь метод HandleError тоже.) Таким образом, вы можете легко связать свойства, характерные для данного объекта с объектом, используя «это» ключевое слово:

statement.executeAsync({ 
    value: 1, 
    handleResult: function(aResultSet) { 
    this.value = 0; 
    }, 
    handleError: function(aError) { 
    this.value = 2; 
    }, 
    handleCompletion: function(aReason) { 
    print(this.value); 
    } 
}); 
Смежные вопросы