2 回答
TA贡献1815条经验 获得超13个赞
我在 .map 函数中使用索引,并适当地解决/拒绝承诺。使用您的索引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);
});
});
TA贡献1871条经验 获得超13个赞
看起来逻辑是错误
的 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 ------');
});
});
添加回答
举报