代码之家  ›  专栏  ›  技术社区  ›  Vincent Nguyen

如何顺序/同步进行API调用-EMFILE error

  •  0
  • Vincent Nguyen  · 技术社区  · 6 年前

    Error: connect EMFILE 结果数据库里只有1700个项目。

    如何顺序/同步地进行这些API调用以避免这种情况?

    function getProducts(myUrl) {
        axios.get(myUrl, { httpsAgent: agent })
            .then(res => {
                res.data.products.forEach(product => {
                    var product = {
                        'values': {
                            '2': product.name,
                            '3': product.display_price,
                            '4': product.slug
                        }
                    };
                    postProduct(product);
                });
            })
            .catch(err => {
                console.log(err);
            });
    }
    
    function postProduct(product) {
        axios.post(huburl, product)
        .then(res => {
            console.log(res.data);
        })
        .catch(err => {
            console.log(err)
        });
    }
    
    for (let i = 1; i <= 686; i++) {
        var pagedUrl = url + '&page=' + i;
        console.log(pagedUrl);
        getProducts(pagedUrl);
    }
    1 回复  |  直到 6 年前
        1
  •  1
  •   Adam H    6 年前

    这里有一个到async/await的简单转换,我说过我会在评论中发布它。

    async function getProducts(myUrl) {
      try {
        let res = await axios.get(myUrl, {
          httpsAgent: agent
        });
        res.data.products.forEach(product => {
          var product = {
            'values': {
              '2': product.name,
              '3': product.display_price,
              '4': product.slug
            }
          };
    
          await postProduct(product);
    
        });
    
      } catch (e) {
        console.log(e);
      }
    }
    
    async function postProduct(product) {
      try {
        let res = await axios.post(huburl, product);
        console.log(res.data);
    
      } catch (e) {
        console.log(e);
      }
    }
    
    for (let i = 1; i <= 686; i++) {
      var pagedUrl = url + '&page=' + i;
      console.log(pagedUrl);
      await getProducts(pagedUrl);
    }