【发布时间】:2020-11-20 13:15:59
【问题描述】:
Promise 看起来非常直接。但是每次遇到它,我都必须做一些变通方法,而实际上我只想同步执行一个函数。
我想知道我是否以某种方式错过了如何正确地做到这一点,因为它应该如何工作似乎很明显。
想象一下下面的代码
getData()
.then(data => {
const dates = [];
generateDates(30, new Date(), dates)
.then(result => {
console.log(result)
})
})
generateDates() 的 promise 在日期数组完成填充之前被解析,因此 console.log() 返回 undefined。
为什么在函数返回之前调用 generateDates() 上的 then()?该函数应仅在日期数组完全填充后返回。这样的承诺对我来说没有意义。
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);
}
【问题讨论】:
-
我看不到 generateate 是一个异步函数。
-
const generateDates(n, date, dates) {是一个语法错误,甚至不返回承诺(也不应该返回),所以我根本看不出generateDates(…).then(…)是如何工作的。 -
"在调用之后如何获取异步函数的返回值" - 你在
then回调内部得到它,而不是通话后。 “事实上,我只希望一个函数同步执行”——如果该函数执行异步操作,那么你就是在要求不可能的事情。拥抱异步,总是从这些函数中返回一个承诺,它会变得简单明了。尤其是async/await语法。 -
@lissettdm 对不起,致命的错字。整个签名都搞砸了
-
因为 generateDates 是一个递归函数,你必须返回递归调用。返回它将使结果成为数组值而不是未定义。