首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Geocode承诺使用大型数组

Geocode承诺使用大型数组
EN

Stack Overflow用户
提问于 2017-11-05 02:44:30
回答 1查看 165关注 0票数 0

我的目标

使用.map对大型数组进行迭代,并以承诺的方式查询。

使用Promise.all在完成时将结果写入.json文件。

代码是为节点编写的,数组是结构化的[[key:value],[key:value],....

我写的东西

代码语言:javascript
复制
var foo = (function() {
  let promises = airports.map(function(airport) {
    return geocoder
      .geocode(airport[1])
      .then(function(res) {
       let x = {
          ident: airport[0],
          address: res[0].formattedAddress,
          lat: res[0].latitude,
          long: res[0].longitude
        };
        return x;
      })
      .catch(function(err) {
        console.log(err);
      });
  });
  return Promise.all(promises)
    .then(function(promises) {
      console.log("promises resolved");
      fs.writeFile(
        path.join(__dirname, "/airports.json"),
        JSON.stringify(promises),
        "utf-8",
        function(err) {
          if (err) throw err;
          console.log("Done!");
        }
      );
    })
    .catch(function(err) {
      console.log(err);
    });
})();

问题所在

对于一个小数组(200左右),代码可以很好地工作,但我需要的不仅仅是这些。我认为这是api速率限制的一个问题,因为代码可以执行几百次迭代,然后返回大量ETIMEDOUT错误。

是否有一种方法可以减慢地图的迭代速度,即每秒一次,这与调用多个承诺有什么关系呢?

我认为这将阻止我正在获得的许多ETIMEDOUT错误。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-05 03:20:12

这应该将请求限制为每秒1次。

代码语言:javascript
复制
var foo = (function() {
    var delay = 1000; // sets the rate
    return airports.reduce((promise, airport) => promise
        .then(results => new Promise(resolve => setTimeout(resolve, delay, results)))
        .then(results => geocoder
            .geocode(airport[1])
            .then(function(res) {
                let x = {
                    ident: airport[0],
                    address: res[0].formattedAddress,
                    lat: res[0].latitude,
                    long: res[0].longitude
                };
                return results.concat(x);
            })
            .catch(function(err) {
                console.log(err);
            })
        ), Promise.resolve([])
    ).then(function(promises) {
        console.log("promises resolved");
        // ... etc
    })
})();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47117686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档