如何在模板文本中使用 Async Await

How to use Async Await inside template literal

提问人:Pasang 提问时间:11/9/2023 最后编辑:BergiPasang 更新时间:11/10/2023 访问量:86

问:

下面的代码只返回字符串文字。我在某处读到模板字符串中的 Async-Await 需要有顶级 await,但就我而言,我怎样才能获得顶级 await?

import { Autocomplete, TextField } from "@mui/material";
import usePlacesAutocomplete, {getGeocode, getZipCode} from "use-places-autocomplete";


const Places = () => { 
<Autocomplete        
   renderOption={(props, option) => 
     <li {...props}> 
        {`${ async () => await getGeocode({placeId: option.place_id})
                                .then(results => getZipCode(results[0], true))()}
        `}
        </li> }
      />
}    
javascript reactjs promise material-ui mui-autocomplete

评论

2赞 evolutionxbox 11/9/2023
您需要在呈现列表项之前等待该值。即便如此,承诺也可能不起作用。这看起来像反应?如果是这样,请考虑先获取地理编码,更新状态,然后将其传递给渲染。renderOption
0赞 jonrsharpe 11/9/2023
根据定义,函数内部不是在顶层。即使在该箭头函数之外,它似乎也位于 React 组件内部,因此仍然不在顶层。
0赞 Bergi 11/10/2023
你的包装器没有意义,将其添加到你上一个问题的代码中一无所获。没有它就重新开始。async
0赞 Bergi 11/10/2023
看来你正在使用react?什么?您是否联系过它的文档,了解它如何(或是否)支持异步请求?<Autocomplete>
0赞 Bergi 11/10/2023
"我在某处读到模板字符串中的 Async-Await 需要有顶级 await“——你在哪里读到的?这是无稽之谈。另外,为什么要使用模板文字?

答:

-2赞 Arsany Benyamine 11/9/2023 #1

我认为您应该从字符串文字中提取异步请求

可以创建一个名为 Option 的新组件,该组件将 api 调用所需的参数作为 Props,并在 useEffect 中执行 api 调用