从服务器获取数据随机停止获取

Fetching data from server randomly stops fetching

我的程序中发生了一些非常奇怪的事情。我有 consol.logged 用时间戳来尝试弄清楚发生了什么的废话。基本上我的程序随机停止获取数据。我已确保有新的数据流,但我必须刷新整个页面或重新保存程序以在挂断时重新启动所有程序。最重要的是,没有错误或标志告诉我它停止的原因。我试图找出问题所在,但这很可能与异步功能有关。这是代码....

function App() {

  const data = async() => {
    try {
        console.log('try block initiated')
        const apiResponse = await fetch(ipAddress)
        console.log(apiResponse);
        console.log("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB")
        const responseText = await apiResponse.text();
        console.log(responseText)
        console.log("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC")
        if (loading === true){
            setLoading(false);
        }
        console.log("DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD")
        return responseText;
    } catch (error) {
        console.log('catch initiated')
        setError(true);
    }
  };
  console.log("AAAAAAAAAAAAAAAAAAAAAAA")
  try{
      console.log("EEEEEEEEEEEEEEEEEEEEEEEEEEE")
    data().then(response=>setMoisture(response));
    console.log("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")
  } catch(error){
    console.log('gotcha')
    setError(true);
}
  
  let value = moisture;
  console.log(value);
  count += 1;  
  console.log(count);


  return(
    <div className="App">
      <WeatherCard moisture={value}/>    
    </div>
  );
}

这是控制台在停止获取新数据之前的样子...

这是一个可能的解决方案。经过许多头痛和研究异步功能。我认为这会奏效。我打算让这个 运行 整晚看看它是否会被赶上,但到目前为止,这是解决方案...

const data = async() => {
try {
    const apiResponse = await fetch(ipAddress)
    const responseText = await apiResponse.text();
    console.log("CCCCCCCCCCCCCCCCCCC");
    console.log(responseText);
    if (loading === true){
        setLoading(false);
    }
    data().then(response=>setMoisture(response));
    return responseText;
} catch (error) {
    console.log("EEEEERRRRRRRRRROOOOOOOOOOORRRRRRRRRRRR")
    setError(true);
    }   
};
console.log("AAAAAAAAAAAAAAAAAAAA");
if (moisture === "initialState"){
    data().then(response=>setMoisture(response));
}else{
    console.log("QQQQQQQQQQQQQQQQQQQQQQQQ")
}

这是我更改的...我做了一个名为“initialSate”的初始状态,如果变量是这个值,它 运行 是异步函数。然后我再也不会在 THE 之外调用这个异步ASYNS ITSELF。取而代之的是,我在从函数返回值之前调用自身。这是有效的,因为我的程序是 运行ning,而异步函数是 运行ning。但是,该程序是按顺序执行的async 是按顺序排列的。它们不是按顺序排列在一起的。因此,现在只有在 async 函数完成其第一个 运行 后才会再次调用 async 函数。同时,我的程序的其余部分是 运行ning。之前我认为它被捕获是因为我的程序在它第一次完成之前试图调用异步函数。这纯属猜测,因为我无法证明这一点,但它是有道理的。如果这一夜 运行失败。我将从解决方案中提取它。否则,我认为这会起作用。手指交叉!