javascript - 声明一个异步函数
问题描述
我是新来的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'.
错误,就像我的函数没有声明为异步函数一样
解决方案
两个问题:
您应该在异步函数中使用 await
但是传递给的回调
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 需要一个非异步函数,该函数通常用于进行一些清理。
推荐阅读
- java - 有没有办法控制用户在 Java 中使用 do 提供的字符串?
- html - 电子邮件 HTML 边框覆盖内容,而不是单元格?
- windows-7 - 使用 7zip (7zS.sfx) 创建的 SFX 存档触发程序兼容性助手
- java - 是否可以以简单的方式使用 PHP POS 与 JavaPOS 设备进行交互?
- javascript - Ember 3.6 超级出租教程 LEAFLET_MAPS_API_KEY 使用 environment.js
- sql - 优化插入选择查询Oracle
- git - 将 master 分支中未提交的更改移动到 dev 分支并恢复 master
- android - 在 CDATA 中包装复数项目时出现 Lint 错误“ImpliedQuantity”
- javascript - 编写低级异步连接函数的更优雅的方法是什么
- javascript - Deck.gl:监听点击底图