我有以下功能

function draw(i, arrayIdColetor, callback) {
  var query = new $kinvey.Query();
  query.equalTo('idColetor', arrayIdColetor[i]);
  var promise = $kinvey.DataStore.find('myDatabase', query);
  var latLong = promise.then(function(response) {
   coordenadas = [];
   for(var j = response.length - 1; j >= 0 ; j--) {
    coordenadas.push( {lat: response[j].lat, lng: response[j].lng});
  }
  return coordenadas;
});

  latLong.then(function(coordenadas) {
    $kinvey.poly[i] = new google.maps.Polyline({ path: coordenadas, ... });
    $kinvey.poly[i].setMap($kinvey.map); });
  callback();
}


该函数由以下函数调用:

function callFor(j, arrayIdColetor) {
  if (j < arrayIdColetor.length){
    draw(j, arrayIdColetor, function() {
      callFor(j + 1, arrayIdColetor)
    });
    }
}


函数callFor需要花费几秒钟的时间才能执行,我希望在callFor函数运行时禁用所有界面按钮。我该怎么解决?

还有一个问题,我想让另一个函数始终在callFor函数完成后运行。

谢谢你的帮助。

最佳答案

也许您可以尝试一下?我真的不明白为什么要使用递归,因为您没有做任何暗示使用递归的事情,而这只会使您想要的行为变得复杂。

function callFor(j, arrayIdColetor) {
  //disable buttons
  for (i = j; i < arrayIdColetor; i++) {
    draw(i, arrayIdColetor, function(){});
  }
  //enable buttons
}

10-07 14:53