javascript异步帮助async.timesLimit

问题描述 投票:1回答:1

我试图异步地抓取一个站点但是一次没有做500个请求,而是一次3个

module.exports.siteRequest = function(n,userInput) {
  payload["numb"]=n
  axios.post(URL, payload, { headers: headers }).then(res => {
      console.log("id",id)
      console.log(res.data)
    })
    .catch(e => {
      console.log("err");
    });
};


async.timesLimit(500,2, function(n, next) {
          siteRequest(n,data)
        });
javascript node.js asynchronous axios
1个回答
3
投票

你需要在.next中调用timesLimit函数,以便向timesLimit迭代器发出信号,告知应该请求下一个项目。例如,以下代码将总共发出10个请求,一次不超过2个请求:

const makePromise = () => new Promise(res => setTimeout(res, 500)).then(() => {
  console.log('resolving');
});
function siteRequest() {
  console.log('initializing');
  return makePromise();
};


async.timesLimit(10,2, function(n, next) {
  siteRequest().then(next);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/async/2.6.1/async.min.js"></script>

对于你的代码,请确保return Promise返回的axios,所以你可以在你的timesLimit链接它。您也可以使用点表示法,在可能的情况下,它优于括号表示法:

module.exports.siteRequest = function(n,userInput) {
  payload.numb = n
  return axios.post(URL, payload, { headers: headers }).then(res => {
    console.log("id",id)
    console.log(res.data)
  })
    .catch(e => {
    console.log("err");
  });
};
async.timesLimit(500,2, function(n, next) {
  siteRequest(n,data).then(next);
});
© www.soinside.com 2019 - 2024. All rights reserved.