Переменная область в CoffeeScript / JavaScript - PullRequest
0 голосов
/ 13 сентября 2011

В следующем коде я хочу использовать переменную markers, которая, как я ожидаю, будет массивом объектов (например, [{...},{...},{...}]). Однако в зависимости от уровня отступа переменная отображает массив empy (т. Е. []).

jQuery ->
  markers = []
  $.getJSON '/users.json', (data) ->
    for obj in data
      marker = {}
      marker =
        lastname: namify(obj.name)
        address: obj.address
      markers.push(marker)
    console.log("3rd level", markers) # It shows the array I want.
  console.log("2nd level", markers)   # "markers" shows an empty array.

Мои ожидания - заполненный массив на 2-м уровне. Результат - пустой массив на 2-м уровне.

Как я могу получить массив, как показано на 3-м уровне, когда я на 2-м уровне.

1 Ответ

4 голосов
/ 13 сентября 2011

Вы заполняете свой массив внутри функции обратного вызова. Таким образом, он заполняется после печати результата. Проблема не в объеме, а в порядке исполнения.

Если вы делаете синхронный запрос, вы должны увидеть то, что ожидаете:

jQuery ->
  markers = []
  $.ajax
    url: '/users.json'
    dataType: 'json'
    async: false
    success: (data) ->
      for obj in data
        marker = {}
        marker =
          lastname: namify(obj.name)
          address: obj.address
        markers.push(marker)
    console.log("3rd level", markers)
  console.log("2nd level", markers)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...