【问题标题】:issue in google place search call back function谷歌地方搜索回调函数中的问题
【发布时间】:2014-02-05 15:16:48
【问题描述】:

我遇到了奇怪的问题。这是关于“文本搜索”类型的谷歌地方搜索。我正在使用关键字搜索结果的地图,并有一个回调函数来创建结果(html 中的“li”)。

问题是 google Place search api 仅提供 20 个文本搜索结果。要检索更多结果,我们必须调用pagination.nextPage()。这会调用相同的回调函数并提供更多结果。

所以,

我的代码是

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() 的递归调用)?

【问题讨论】:

    标签: javascript google-maps-api-3 google-places-api asynchronous


    【解决方案1】:

    不是专家,但看起来有点逻辑缺陷,所以我会这样做:

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

    否则doOtherOperation();每次都会被调用,无论您必须再次访问 nextPage。

    希望对你有帮助

    【讨论】:

    • 是的,我想是的,让我试试这个,看看!
    • 成功了!为什么我认为这不简单! :) 非常感谢!
    【解决方案2】:

    尝试用setTimeout(function() { /* */}, 0)包裹doOtherOperation()

    更新...怎么样?

    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;
        }
    }
    

    【讨论】:

    • 没有帮助!问题仍然存在:(
    • 我不确定这是否可行。您可以有 3 页或结果。我知道他想在收集完所有信息后致电doOtherOperation()
    猜你喜欢
    • 2021-03-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多