2009-05-28 2 views

ответ

1

Имейте в виду, что getLatLng() является асинхронным: вы передаете анонимную функцию для выполнения, когда она завершается.

Ваша функция getLongLat() не сможет вернуть точку в этом случае, потому что эта анонимная функция выполняется в совершенно другом контексте асинхронно: ваша функция будет выполняться и возвращаться до воли Google, а точка не будет в области внешней функции.

Вам необходимо позвонить любой код, который вы хотите работать с точками внутри этой анонимной функции:

function getLongLat(address) 
{ 
    geocoder = new GClientGeocoder(); 
    if (geocoder) { 
     return geocoder.getLatLng(address, 
     function(point) { 
      // point is only in scope for this anonymous inner function 
      // which is called when your request to Google's service completes 
      if (!point) { 
       // your error condition if a point isn't found 
       // omgMissingPoint(point); 
      } else {   
       // your function to process points here. 
       // processPoint(point); 
      } 
     } 
     ); 
    } 

}

+1

Я думаю, что это проблема. Однако использование этого метода все же дает тот же результат. – 2009-05-30 09:39:13

1

Что делать, если geocoder не является Действительно? И geocoder.getLatLng не возвращает никакого значения.

Так что оба возвращают что-то, возможно:

function getLongLat(address) { 
    geocoder = new GClientGeocoder(); 
    if (geocoder) { 
     return geocoder.getLatLng(address, function(point) { 
      if (!point) { 
       return "null"; 
      } else { 
       return point; 
      } 
     }); 
    } 
    return "null"; 
} 
+1

'Возвращение«нулевой»' возвращает строку «нуль». Вместо этого напишите 'return null'. –

+0

Возможно, это то, что он хочет. Взгляните на его оригинальный код. Он также использовал строку '" null "вместо значения" null ". – Gumbo

4

Попробуйте это: D

function getLongLat(address) 
{ 
     geocoder = new GClientGeocoder(); 
     if (geocoder) { 
      return geocoder.getLatLng(address, 
      function(point) { 
       if (!point) { 
       return "null"; 
       } else {   
        return point; 
       } 
      } 
      ); 
     } 
     return false; 
} 
+2

sarnath'd - вы можете объяснить, что ему не хватает возврата, и почему это имеет значение, а не позволяет OP разобраться в этом :) :) – annakata

+0

Нет, мне что-то не хватает. Если у меня есть предупреждение выше точки возврата, я получаю кординаты. Неужели я это неправильно делаю? оповещение (getLongLat (адрес)); – 2009-05-28 11:09:43

2

Это потому, что ваша функция не имеет оператор возврата.

Внутренняя функция, вызываемая как параметр geocoder.getLatLng, имеет оператор возврата, что вас сбивает с толку. Я предлагаю вам извлечь внутреннюю функцию, чтобы уменьшить запутанные аспекты.

Попробуйте это:

function convert_to_null_if_falsy(value) { 
    return value || "null"; 
}  

function getLongLat(address) { 
    geocoder = new GClientGeocoder(); 
    return geocoder.getLatLng(address, convert_to_null_if_falsy); 
} 

Я не знаю, почему вы хотите, чтобы вернуть строку "null" вместо undefined в функции обратного вызова, но этот код делает то же самое с намного меньше хлопот.

+1

+1 чертовски просто, когда я собирался опубликовать аналогичное объяснение :-) – Rytmis

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