javascript - 声明一个异步函数

标签 javascript reactjs

我是 React 的新人我正在尝试调用 async function ,但我得到 Unexpected reserved word 'await'.错误

所以我的异步函数位于 Helper class 中谁应该执行所有 API 调用,我称之为 Helper class在我的Game function

这是我来自 Class Helper 的代码:

class Helper {
      constructor() {
        this.state = {
          movieAnswer: {},
          profile_path:"",
          poster_path:"",
          myInit: { method: "GET", mode: "cors" }
        }
      }
  fetchMovieFunction = async (randomMovie) => {
    return new Promise((resolve) => {
    fetch(`${MOVIE_KEY}${randomMovie}?api_key=${API_KEY}`, this.myInit)
    .then(error => resolve({ error }))
    .then(response => resolve({ poster_path: response.poster_path }));
    }); 
  }

这是我打电话的地方 fetchMovieFunction在我的game function :

const helper = new Helper();


    function Game() {
     useEffect(() => {
        setRandomMovie(Math.floor(Math.random() * (500 - 1) + 1));
        const { poster_path, error } = await helper.fetchMovieFunction(randomMovie)
        if (error)
          return console.log({error});
        setApiMovieResponse({poster_path})
      }, [page]);
   return ();
    }

我不明白为什么在这一行 const { poster_path, error } = await helper.fetchMovieFunction(randomMovie)我得到Unexpected reserved word 'await'.错误如我的函数未声明为异步函数

最佳答案

两个问题:

  1. 您应该在异步函数中使用await

  2. 但是传递给 useEffect 的回调不应该是异步的。因此,您可以创建一个 IIFE 并使其异步:

    useEffect(() => {
       (async () => {
         setRandomMovie(Math.floor(Math.random() * (500 - 1) + 1));
         const { poster_path, error } = await helper.fetchMovieFunction(randomMovie);
         if (error) return console.log({ error });
         setApiMovieResponse({ poster_path });
       })();
     }, [page]);
    

回调本身不应该是异步的,因为这会使回调返回一个 promise ,而 React 需要一个通常用于执行一些清理操作的非异步函数。

关于javascript - 声明一个异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69099381/

相关文章:

javascript - 默认选中的复选框不会在单击时切换

javascript - 新窗口在单击 [window.开场白。]

javascript - JS Menu 保持菜单状态

Javascript 在 Internet Explorer 中破坏属性的空值 - 如何让 IE 忽略此问题?

reactjs - 对 node_module 的更改未反射(reflect) reactjs

javascript - 使用 jest 运行测试时 URLSearchParams 未定义错误

javascript - 使用 react 测试库从 Jest 测试访问和修改 react 上下文

Javascript 从 UTC 转换为本地日期时间

javascript - 从自定义元素检测事件监听器(延迟发出事件)

javascript - 函数更改输入数组的数据