javascript - 为什么这种递归解决方案不能与 Javascript 中的异步函数一起使用,但可以迭代地正常工作?
问题描述
用 JavaScript 编码大约一年,但我遇到了这个奇怪的错误/错误,我找到了解决方案,但很好奇为什么要解释。
所以我有一个异步函数从 API 接收天气数据getWeatherStats()
它返回一个承诺,该承诺.then
在另一个名为getCoordinates()
. 我简化了weatherParser()
函数以表明如果我使解决方案递归,它返回未定义,但如果迭代完成它工作正常。
getWeatherStats(city).then((data) => {
console.log(data)
var i = 0;
var done = weatherParser(data, i);
console.log(done); //returns undefined if done recursively, is fine if done iteratively
})
async function getWeatherStats(city) {
var url = `http://api.openweathermap.org/data/2.5/forecast?q=${city}&appid=${weatherKey}`;
let response = await fetch(url);
let data = await response.json();
var i = 0;
return new Promise(resolve => {
resolve(data);
}, 2000);
这是返回 null 的递归解决方案
function weatherParser(data, i, widgetHolder, date = null) {
if (i > 20) return 'hello'
i++;
weatherParser(data, i, widgetHolder, date)
迭代解决方案:
function weatherParser(data, i, widgetHolder, date = null) {
for (var i = 0; i < 20; i++) {
}
return 'hello'
解决方案
推荐阅读
- django - 未找到“about_me”的反向。“about_me”不是有效的视图函数或模式名称
- ios - 使用苹果配置器 2 安装应用程序 - 无法安装错误
- php - 找不到类 'Illuminate\Support\Facades\Finder'
- javascript - JavaScript 函数:这是做什么的?
- mysql - 查询以获取按字段值分组的所有行以及另一个字段的条件
- r - 如何减少ggplot绘图区域中的空白?
- html - ASP.net MVC - 单选按钮验证不起作用
- .htaccess - htaccess RewriteCond 与 HTTP_HOST 和特定 REMOTE_ADDR
- python - 使用快速傅里叶变换生成相关随机势
- vba - 直接从 Excel 发送时,VBA Excel 代码不会在签名中嵌入图像