在承诺中设置超时

我想为一个承诺设置一个超时时间。


错误信息 :


Status is OVER_QUERY_LIMIT. You have exceeded your rate-limit for this API.

所以,要每秒执行一次 API,我需要在 Promise 中设置一个超时时间。但是在我下面的代码中它不起作用......


我的代码:


CoordinateModel.findAll().then(function(findedCoordinates) {


  var promises = [];


  promises = findedCoordinates.map(function(coordinate) {

    return new Promise(function() {

      setTimeout(function() {

        return geocoder.geocode(coordinate.address + ' ' + coordinate.postcode + ' ' + coordinate.city + ' ' + coordinate.complementaryAddress).then(function(res) {

          return coordinate.update({

            lng: res[0].longitude,

            lat: res[0].latitude

          }).then(function() {

            console.log(coordinate.name + ' : ' + res[0].longitude + ',' + res[0].latitude);

            return Promise.resolve();

          });

        }).catch(function(err) {

          console.log(err);

          return Promise.reject();

        });

      }, 1000);

    });

  });


  Promise.all(promises).then(function() {

    console.log('------ END ------');

  });


});


侃侃尔雅
浏览 131回答 2
2回答

萧十郎

我在 .map 函数中使用索引,并适当地解决/拒绝承诺。使用您的索引setTimeoutpromises = findedCoordinates.map(function(coordinate, index) {    return new Promise(function(resolve, reject) {      setTimeout(function() {        return geocoder.geocode(coordinate.address + ' ' + coordinate.postcode + ' ' + coordinate.city + ' ' + coordinate.complementaryAddress).then(function(res) {          return coordinate.update({            lng: res[0].longitude,            lat: res[0].latitude          }).then(function() {            console.log(coordinate.name + ' : ' + res[0].longitude + ',' + res[0].latitude);            resolve();          });        }).catch(function(err) {          console.log(err);          reject(err);        });      }, 1000 * index);    });  });

慕桂英4014372

看起来逻辑是错误的 settimeout 代码的作用它会同时调用所有请求,除了它会在一秒后调用 你可以增加 setTimeout 每个实例,就像第一个实例需要 0 秒,第二个例如,它将等待 1 秒,对于该实例,它将等待 2 秒,....通过1000 * i在第 20 行更改CoordinateModel.findAll().then(function (findedCoordinates) {    var promises = [];    promises = findedCoordinates.map(function (coordinate) {        return new Promise(function () {            setTimeout(function () {                return geocoder.geocode(coordinate.address + ' ' + coordinate.postcode + ' ' + coordinate.city + ' ' + coordinate.complementaryAddress).then(function (res) {                    return coordinate.update({                        lng: res[0].longitude,                        lat: res[0].latitude                    }).then(function () {                        console.log(coordinate.name + ' : ' + res[0].longitude + ',' + res[0].latitude);                        return Promise.resolve();                    });                }).catch(function (err) {                    console.log(err);                    return Promise.reject();                });            }, 1000 * i);        });    });    Promise.all(promises).then(function () {        console.log('------ END ------');    });});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript