在异步函数上调用 then 之后如何获取异步函数的 return 值

how to get the return value of an async function after then is called on the async function

承诺看起来非常简单。但是每次遇到它,我都必须做变通,而实际上我只想同步执行一个函数。

我想知道我是否错过了正确的操作方法,因为它应该如何工作似乎很明显。

想象一下下面的代码

getData()
.then(data => {
  const dates = [];
  generateDates(30, new Date(), dates)
  .then(result => {
    console.log(result)
  })
})

generateDates() 的承诺在日期数组完成填充之前得到解决,因此 console.log() return 未定义。

为什么在函数 returns 之前调用 generateDates() 的 then()?一旦日期数组完全填充,该函数应该只 return 。这样的承诺对我来说没有意义。

const generateDates = async(n, date, dates) => {
  if (n === 0) {
    return dates;
  }
  dates.push(date);
  n--;
  date = date - (30 * 24 * 60 * 60 * 1000)
  generateDates(n, date, dates);
}

问题不在于 generateDates 在日期完成填充之前得到解决,而是因为没有返回递归调用。

 const getData = async() => {};

 const generateDates = async(n, date, dates) => {
      if (n === 0) {
        return dates;
      }
      dates.push(date);
      n--;
      date = date - (30 * 24 * 60 * 60 * 1000)
      return generateDates(n, date, dates);
    }

    const dates = [];
    getData().then(data => {
      const dates = [];
       generateDates(2, new Date(), dates).then(result =>        console.log(result))

    })