承诺似乎很直截了当。但是,每次我遇到它时,我都必须执行变通办法,而实际上我只希望一个函数被同步执行。
我想知道我是否由于某种原因错过了正确执行的方法,因为它看起来是如此明显。
想象以下代码
getData()
.then(data => {
const dates = [];
generateDates(30, new Date(), dates)
.then(result => {
console.log(result)
})
})
在dates数组完成填充之前,将对generateDates()的承诺进行解析,因此console.log()返回undefined。
为什么在函数返回之前在generateDates()上调用then()?只有在dates数组完全填充后,该函数才应返回。这样对我来说,承诺是没有意义的。
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))
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句