function getProjects() {
  return new Promise(function(resolve, reject) {

    axios.get('url', {
      auth: {
        username: 'username',
        password: '   '
      }
    }).then(function(response) {
      let res = response.data.value;
      for (let i = 0; i < res.length; i++) {
        projects.push(res[i])
        resolve(projects);
      }
      console.log(projects)
    }).catch(function(error) {
      console.log(error)
    })
  })
}

getProjects()
  .then(function(proj) {
    console.log('proj', proj)

    function asnycItemAssignment() {
      return new Promise(function(resolve, reject) {
        for (let i = 0; i < proj.length; i++) {
          axios.get(`url`, {
              auth: {
                username: 'username',
                password: '   '
              }
            }).then(function(response) {
              //console.log(response.data.value)
              finalArr.push(response.data.value)
            })
            .catch(function(error) {
              console.log(error)
            })
        }

        resolve(finalArr)
      })
    }

    asnycItemAssignment()
      .then(function(res) {

        console.log('res', res)

        function flatten() {
          return new Promise(function(resolve, reject) {

            var myNewArray3 = [];
            for (var i = 0; i < res.length; ++i) {
              for (var j = 0; j < res[i].length; ++j) {

                console.log('pushed', i, j, res[i][j])
                myNewArray3.push(res[i][j]);
              }
            }

            console.log('finalArr', myNewArray3)
            resolve(myNewArray3)
          })
        }

        flatten()
          .then(function(value) {
            console.log('val', value)
          })

      })

  })
}


这是我想要做的。

我正在尝试从API提取项目列表,将其存储到projects并将其解析为Promise。再一次,我尝试使用projects的名称,并将其用于另一个向我提供该项目内数据的API。这会将其存储到finalArr中。这次我解决finalArr

finalArr是对象数组的数组。像[[{...}{...}][{...}]]这样的东西,这就是为什么我想变平使其像[{...},{...},{...},{...}]的原因。

但是,在我的asnycItemAssignment中,应该为我提供res结果的finalArr不能为我提供其中包含所有值的完整数组。

代码很乱,但是我觉得我做对了。
我究竟做错了什么?

编辑

async function getData() {
  let getProject =
    await axios.get('url', {
      auth: {
        username: 'username',
        password: '    '
      }
    })

  let projects = await getProject.data.value;

  projects.map(project => {
    let ItemAssignment =
      axios.get(`url`, {
        auth: {
          username: 'username',
          password: '    '
        }
      })

    let values = await ItemAssignment.data.value
    console.log(values)
  })

  console.log('pr', projects)
}

getData()

最佳答案

我真的认为您应该阅读异步/等待。当您依靠一个异步操作的结果执行另一个操作时,它使代码更具可读性。下面是一些伪代码,以助您一臂之力:

async function go() {
    try {
        const projects = await getProjects();
        projects.map(project => {
            const itemAssignments = await asnycItemAssignment(project);
            const flattened = await flatten(itemAssignments);
            console.log(flattened);
        }
    } catch (e) {
        console.error(e); // 💩
    }
}


另外,一般来看如何使用axios:

async getData() {
    return await axios(...);
}


然后,您可以使用getData,例如:

const r = await GetData();

关于javascript - 异步 promise 没有获得正确的值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51992103/

10-09 14:04