2013-02-18 3 views
1

я тестирование Phonegap Web Storage для небольшого проекта:Как установить переменную внутри функции обратного вызова в JavaScript?

var listsCount = 0; 

tx.executeSql("SELECT * FROM list WHERE id = ?", [id], successGetList, errorGetList); 

function successGetList(tx, results){ 
    listsCount = results.rows.length; // this will be 2, in my case 
} 

function errorGetList(err){ 
    console.log("Error processing SQL: "+err.code); 
} 

console.log(listsCount); // this will show 0, instead of 2 

вопрос я имею что listsCount не приготовьтесь внутри метода successGetList. Даже если я верну его туда.

любые идеи о том, как я могу установить эту переменную внутри функции successGetList?

благодаря

+0

Возможный дубликат [Как вернуть ответ от вызова AJAX от функции?] (Http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax- call-from-a-function) (Конечно, это не AJAX, но применяется такое же асинхронное поведение.) –

+0

@ FrédéricHamidi Это тоже не спрашивает о «возврате». Вы правы, что ответ там должен указывать на правильное направление, но, возможно, это слишком много для этого конкретного вопроса. – bfavaretto

ответ

4

Это приготовьтесь, но ваш console.log вызов увольняют до того, что (это как асинхронный код работает!). Просто используйте значение из обратного вызова. Если вам нужно, вызовите еще одну функцию и передайте ей данные.

+0

'Просто используйте значение из обратного вызова', как? – Patrioticcow

+0

Я имею в виду использование 'results.rows.length' изнутри' successGetList' или вызывать из него другую функцию и передавать ее. Точный ответ будет зависеть от того, что вы хотите сделать со значением ... – bfavaretto

+0

получил его. не заметил, что обратный вызов является асинхронным. благодаря – Patrioticcow

Смежные вопросы