在异步函数上调用 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))
})
承诺看起来非常简单。但是每次遇到它,我都必须做变通,而实际上我只想同步执行一个函数。
我想知道我是否错过了正确的操作方法,因为它应该如何工作似乎很明显。
想象一下下面的代码
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))
})