在承诺中设置超时



我想为promise设置一个超时。

错误消息:

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

我在.map函数中使用索引,并适当地解析/拒绝promise。在setTimeout中使用索引

promises = 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);
});
});

看起来逻辑是错误的
设置代码是什么
它将同时调用所有请求,但一秒钟后调用除外
您可以为每个实例增加setTimeout,就像第一个实例需要0秒,第二个实例需要1秒,实例需要2秒,。。。。通过改变第20行的1000 * i

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

相关内容

  • 没有找到相关文章

最新更新