通过@ odata.nextLink以递归方式从节点的其余api(odata)响应中获取所有数据

时间:2019-01-08 11:58:57

标签: node.js odata

我得到了一个api响应,其中一次反馈了50000多种产品。响应末尾有“ @ odata.nextLink”。一个人可以使用'@ odata.nextLink'与节点自动获取剩余数据吗?

我尝试了一段时间的请求循环,但没有成功。

即。 while(body ['@ odata.nextLink']){请求...}

能做到吗?

2 个答案:

答案 0 :(得分:0)

尝试以下内容:

const fakeAPI = async id => (
  id==10
  ? { id }
  : { id, nextId: id+1 }
);

( async () => {
  let allResponses = [];
  let finished = false;
  let id = 0;
  while (!finished) {
    let response = await fakeAPI(id);
    finished = response.nextId===undefined;
    id = response.nextId;
    allResponses.push(response);
  }
  console.log(allResponses);
})()

在使用异步代码循环时,使用async/await很酷。

答案 1 :(得分:0)

这对我有用:

async function getAllResults() {
  var allResults = [];
  let url = 'https://your/endpoint/url/';
      
  do {
    const res = await axios.get(url)
    const data = await res.data.value;
    url = res.data['@odata.nextLink']
    allResults.push(...data);
  } while(url)

  return allResults;
}