OVER_QUERY_LIMIT in Google Maps API v3: How do I pause/delay in Javascript to slow it down?

前端 未结 6 1997
暖寄归人
暖寄归人 2020-11-22 08:49

I\'m hitting an issue that is WELL discussed in these forums, but none of the recommendations seem to be working for me so I\'m looking for some full javascript that works w

6条回答
  •  旧巷少年郎
    2020-11-22 09:27

    this post was made a while ago, but it provides an answer that did not solve the problem regarding reaching the limit of requests in an iteration for me, so I publish this, to help who else has not served.

    My environment happened in Ionic 3.

    Instead of making a "pause" in the iteration, I ocurred the idea of ​​iterating with a timer, this timer has the particularity of executing the code that would go in the iteration, but will run every so often until it is reached the maximum count of the "Array" in which we want to iterate.

    In other words, we will consult the Google API in a certain time so that it does not exceed the limit allowed in milliseconds.

    // Code to start the timer
        this.count= 0;
        let loading = this.loadingCtrl.create({
          content: 'Buscando los mejores servicios...'
        });
        loading.present();
        this.interval = setInterval(() => this.getDistancias(loading), 40);
    
    // Function that runs the timer, that is, query Google API
      getDistancias(loading){
        if(this.count>= this.datos.length){
          clearInterval(this.interval);
        } else {
          var sucursal = this.datos[this.count];
          this.calcularDistancia(this.posicion, new LatLng(parseFloat(sucursal.position.latitude),parseFloat(sucursal.position.longitude)),sucursal.codigo).then(distancia => {
        }).catch(error => {
          console.log('error');
          console.log(error);
        });
        }
        this.count += 1;
      }
      calcularDistancia(miPosicion, markerPosicion, codigo){
        return new Promise(async (resolve,reject) => {
          var service = new google.maps.DistanceMatrixService;
          var distance;
          var duration;
          service.getDistanceMatrix({
            origins: [miPosicion, 'salida'],
            destinations: [markerPosicion, 'llegada'],
            travelMode: 'DRIVING',
            unitSystem: google.maps.UnitSystem.METRIC,
            avoidHighways: false,
            avoidTolls: false
          }, function(response, status){
            if (status == 'OK') {
              var originList = response.originAddresses;
              var destinationList = response.destinationAddresses;
              try{
                if(response != null && response != undefined){
                  distance = response.rows[0].elements[0].distance.value;
                  duration = response.rows[0].elements[0].duration.text;
                  resolve(distance);
                }
              }catch(error){
                console.log("ERROR GOOGLE");
                console.log(status);
              }
            }
          });
        });
      }
    

    I hope this helps!

    I'm sorry for my English, I hope it's not an inconvenience, I had to use the Google translator.

    Regards, Leandro.

提交回复
热议问题