Это не имеет ничего общего с областью видимости, а скорее с асинхронными обратными вызовами.
persistence.js - это асинхронный каркас, поэтому код не обязательно выполняется сверху вниз. Это распространенная ошибка людей, которые только начали работать с асинхронным Javascript.
С помощью вызова regions.list(...)
(кстати, вы можете пропустить аргумент null
), вы дадите выполнение - вы в основном говорите: всякий раз, когда вы получаете результаты из этого запроса, вызывайте эту функцию (это анонимно). функцию, которую вы передаете list
). Затем выполнение продолжается, выполняя alert
, пока regionList
еще пуст (потому что в то время запрос еще не завершился).
Позже, когда запрос заканчивает выполнение, вызывается функция обратного вызова, заполняющая массив.
Итак, как это исправить: переместите alert
внутрь функцию обратного вызова:
regions.list(null, function(results) {
results.forEach(function(r) {
regionList.push(r.displayName);
});
alert(regionList);
});