首页 > 解决方案 > 不要在循环中创建函数,.then 应该返回一个值或抛出

问题描述

我目前有一个我正在用 javascript 编写的函数。我正在点击 domo 的 api 并获取数据集的每个单独页面,直到在 do while 循环中没有其他东西可以抓取。然而,ESLINTR 对我大喊大叫:不要在循环中创建函数,并且 .then 应该返回一个值或抛出一个错误。我不确定如何消除这些错误。代码如下:

  const getExistingDatasets = async () => {
    let results = 0
    let offSet = -50

    do {
      offSet = offSet + 50
      await axios
        .get(`https://api.domo.com/v1/datasets`, {
          headers: {
            Authorization: auth,
            Accept: 'application/json'
          },
          params: {
            offset: offSet
          }
        })
        .then(r => {
          results = r.data.length
          const data = r.data
          data.map(data => getDatasetColumns(data.id, data.name))
          console.log(results)
        })
    } while (results > 49)
  }

  getExistingDatasets()

标签: javascriptnode.js

解决方案


首先,您应该避免将 async/await 与 promise .then 混合使用——在这种情况下这样做可以解决这两个问题

const getExistingDatasets = async() => {
  let results = 0;
  let offSet = -50;
  const handleData = data => 
      data.forEach(item => getDatasetColumns(item.id, item.name));
  do {
    offSet = offSet + 50;
    let r = await axios
      .get(`https://api.domo.com/v1/datasets`, {
        headers: {
          Authorization: auth,
          Accept: 'application/json'
        },
        params: {
          offset: offSet
        }
      });
    results = r.data.length;
    handleData(r.data);
    console.log(results)
  } while (results > 49)
}

getExistingDatasets();

编辑:添加“handleData”功能


推荐阅读