在 ES6 React .JS 中使用 Async/Await

Posted

技术标签:

【中文标题】在 ES6 React .JS 中使用 Async/Await【英文标题】:Using Async/Await in ES6 React .JS 【发布时间】:2019-04-24 02:14:24 【问题描述】:

我有一个安装了 ReactJS 的 NetCore2 应用程序。

我的 React 应用程序做这样的事情 ->

用户在字段中输入 axios 调用 api 以获取用户和/或用户列表 输入字段根据保存在 PeopleList 状态的内容显示建议。

我正在使用 Office Fabric UI React - People Picker(以防万一)。

我的问题是我不知道如何在我的代码中使用 async/await。

如果我放这样的东西

async asynconFilterChanged = (filterText, currentPersonas, limitResults) =>

VS Code 抛出一个错误,告诉我 async 仅适用于 .ts 文件。此外,如果我在任何其他函数中使用 await,我将收到错误消息,例如 await is a reserved word

据我所知,async/await 不仅仅是 TS……(或者我错了吗?)。

我正在使用带有 ENV 预设的旧 Babel。

如果我需要提供更多代码,请告诉我,但 TLDR 我想要的是仅在我的 axios 完成将项目推送到 PeopleList 状态(对象数组)之后启动过滤器功能。

谢谢!

【问题讨论】:

【参考方案1】:

按照语法尝试遵循上面的代码库,

asynconFilterChanged = async (filterText, currentPersonas, limitResults) => 
            try 
                await yourFucntion = (limitResults) => 
                ....Your logic...
                
             catch(error) 
                console.error(error);
            

是的,尝试使用和触摸async-await guide

【讨论】:

【参考方案2】:

当使用箭头函数时,你应该这样写 async/await:

const asynconFilteredChanged = async () => 
 // code here 

查看Syntax for async arrow function

【讨论】:

似乎部分工作,但是即使“等待”函数已转换为异步,babel 仍会引发“等待是保留字”错误。有什么提示吗?也知道哪里是放置 const 函数的最佳位置吗? render() 可以吗?谢谢!编辑:似乎将其移出 setTimeout 停止了“等待”错误。我假设你不能同时使用 await 和 timeout。

以上是关于在 ES6 React .JS 中使用 Async/Await的主要内容,如果未能解决你的问题,请参考以下文章

ES6 之 async 异步函数

如何在 react.js ES6 中使用道具设置状态

ES6+--》熟知JS中的async函数

ES6 和 ES7 功能在 react-native 中没有 babel 转译?

es6 async与await实战

js es6语法 Iterator遍历器 promise async函数