0

Я столкнулся с странной проблемой. Это касается поиска в google Place типа «textearch». Я ищу карту для результатов с ключевым словом и функцию обратного вызова для создания результата («li» в html).вопрос в google поиск по сайту функция обратного вызова

Проблема заключается в том, что поиск по сайту google api дает всего 20 результатов для поиска текста. Чтобы получить больше результатов, мы должны позвонить pagination.nextPage(). Это вызывает ту же функцию callBack и дает больше результата.

Так,

Мой код

var request = {query: 'pizza in newyork'}; 
var service = new google.maps.places.PlacesService(map); 
service.textSearch(request, callBack1); 

function callBack1(results, status,pagination) { 
    for (var i = 0; i < results.length; i++) { 
     var place = results[i]; 
     //add place as li 
    } 
    if (pagination.hasNextPage) { 
     pagination.nextPage(); 
    } 
      doOtherOperation(); 
} 

function doOtherOperation() { 
    //do manipulations on "li" which are created from callBack1 
} 

Проблема заключается в том, что doOtherOperation() начинает выполняться до callBack1() завершает выполнение.

Любой может помочь? как убедиться, что callBack1 будет выполняться полностью (включая рекурсивные вызовы на pagination.nextPage())?

ответ

2

Не специалист, но выглядит как небольшой логический изъян, так что я буду делать это таким образом:

if (pagination.hasNextPage) { 
    pagination.nextPage(); 
    } 
else 
    { 
    doOtherOperation(); 
    } 

В противном случае doOtherOperation(); вызывается каждый раз, независимо от того, что вам нужно снова пройти через следующую страницу.

Надеюсь, это поможет

+0

Я, я так и думал, позвольте мне попробовать это и увидим! –

+0

Это сработало !, почему я так не думал! :) Большое спасибо! –

1

пытаются обернуть doOtherOperation() с setTimeout(function() { /* */}, 0)

UPDATE ... как насчет этого?

var flag = false; 

function callBack1(results, status,pagination) { 
    /* since callback1 is the same callback for textSearch() and nextPage() - 
     you need to call dootherOperation at the beginning of statement */ 
    if (flag) { 
     doOtherOperation(); 
    } 
    for (var i = 0; i < results.length; i++) { 
     var place = results[i]; 
     //add place as li 
    } 
    if (pagination.hasNextPage) { 
     flag = true; 
     pagination.nextPage(); 
    } 
    else { 
     flag = false; 
    } 
} 
+0

не поможет! проблема все еще есть :( –

+0

еще одна попытка - я обновил свой ответ ... :) – Vytalyi

+1

Я не уверен, что это сработает. У вас может быть 3 страницы или результаты. Я понял, что он хочет называть 'doOtherOperation()' когда вся информация собирается. –

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