为什么我的提取请求未在事件监听器回调函数中执行?

只需挂起API调用并提取,并整理了以下代码,即可从Trip Advisor API中获取一些信息,并使用此信息将消息记录到控制台。

当我调用fetch request函数时,它会很好地记录到控制台,但是一旦将其包装到事件侦听器回调中,它就不再执行,为什么呢?

感谢任何帮助!

//This is the fetch function kept in a file names request.js

const findRest = async (reviews,closed) => {
  const respond = await fetch(
    "https://tripadvisor1.p.rapidapi.com/restaurants/list-by-latlng?limit=30&currency=EUR&distance=2&lunit=km&lang=en_US&latitude=53.3498&longitude=-6.2603",{
      method: "GET",headers: {
        "x-rapidapi-host": "tripadvisor1.p.rapidapi.com","x-rapidapi-key": /* my rapidapi key */
      }
    }
  );

  if (respond.status === 200) {
    let data = await respond.json();
    let newData = await data.data;

    let data1 = await newData.filter(
      review => parseInt(review.num_reviews) >= reviews
    );
    let data2 = await data1.filter(close => close.is_closed == closed);
    return data2;
  } else {
    throw new Error("Could not provide results within specified parameters");
  }
};

//This is the event listener kept in a file names app.js - both files are active and no problems communicating with each other

document.querySelector(".subButton").addEventListener("click",e => {
  e.preventDefault();
  console.log("click");
  const userReviews = parseInt(document.querySelector(".userRev").value);
  const userClose = document.querySelector(".userClose").value;

  findRest(userReviews,userClose)
    .then(data => {
      data.forEach(element => {
        console.log(
          `${element.name} matches your search criterea and is located at ${element.address}
        To make a booking,please call ${element.phone}`
        );
      });
    })
    .catch(err => {
      console.log(err);
    });
});

//HTML below

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1" />
    <title>What Wine?</title>
    <meta name="author" content="Phil My Glass" />
    <meta
      name="description"
      content="An app to help you find the wine you like or something new based on your preferences"
    />
    <meta name="keywords" content="wine" />
    <link rel="stylesheet" href="style.css" type="text/css" />
  </head>
  <body>
    <header>
      <h1>What Restaurant?</h1>
    </header>
    <main>
      <form>
        <input class="userRev" /><br />
        <input class="userClose" />
        <button class="subButton" type="submit">Find!</button>
      </form>
    </main>
  </body>
  <script src="req.js" type="text/Javascript"></script>
  <script src="app.js" type="text/Javascript"></script>
</html>
tomehack110 回答:为什么我的提取请求未在事件监听器回调函数中执行?

这两行看起来可能会破坏线程:

  const userReviews = parseInt(document.querySelector(".userRev").value);
  const userClose = document.querySelector(".userClose").value;

如果document.querySelector(".userRev")document.querySelector(".userClose")中的任何一个为空,则将发生TypeError。

肯定会了解HTML。

本文链接:https://www.f2er.com/2930001.html

大家都在问