首页 > 解决方案 > 为什么这种递归解决方案不能与 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'

标签: javascriptreactjs

解决方案


推荐阅读