我正在尝试使用从GET请求接收的数据填充数据库。每个请求返回500个项目,这又向数据库发出500个POST。共有686个GET请求。我遇到的问题是第三个GET之后,我开始接收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);
}

最佳答案

这是我说过要在评论中发布的对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);
}

关于javascript - 如何顺序/同步进行API调用-EMFILE错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51828169/

10-10 11:43