React Native Android端AWS Datastore存用户报Symbol.asyncIterator未定义如何解决
React Native Android端AWS Datastore
Symbol.asyncIterator 报错解决方案 问题根因
Android端React Native的JS运行环境(低版本Hermes或JavaScriptCore)未内置Symbol.asyncIterator实现,而iOS端默认提供了该API,因此仅Android端报错。同时当前代码未处理DataStore.save的异步Promise,也会触发「Possible unhandled Promise Rejection」提示。
解决方案
- 第一步:添加
Symbol.asyncIteratorpolyfill
先安装依赖:
在项目入口文件(通常是根目录的npm install core-js @babel/plugin-proposal-async-generator-functions --save # 若使用yarn则执行 yarn add core-js @babel/plugin-proposal-async-generator-functionsindex.js)最顶部导入polyfill:
修改项目根目录的import 'core-js/features/symbol/async-iterator'; // 若仍有其他兼容问题可以全量导入core-js // import 'core-js/stable'; // import 'regenerator-runtime/runtime';babel.config.js,新增插件配置:module.exports = { presets: ['module:metro-react-native-babel-preset'], plugins: [ '@babel/plugin-proposal-async-generator-functions', // 保留其他原有插件 ], }; - 第二步:修复异步方法的Promise处理
DataStore.save是异步方法,需要用async/await加try/catch处理异常,避免未捕获的Promise rejection报错,修改后的save函数如下:const save = async () => { if(!isValid()) { console.warn('Not valid'); return; } try { const newUser = new User({ name, bio, gender, lookingfor, image: 'https://notjustdev-dummy.s3.us-east-2.amazonaws.com/avatars/elon.png', }); await DataStore.save(newUser); // 补充保存成功后的业务逻辑 } catch (error) { console.error('保存用户数据失败:', error); // 补充错误处理逻辑,如用户提示 } }; - 可选优化方案:如果项目React Native版本低于0.66,可以升级RN版本到0.66及以上,新版Hermes引擎已经内置支持
Symbol.asyncIterator,无需额外引入polyfill。
内容的提问来源于stack exchange,提问作者Benjamin Ikwuagwu
相关产品推荐
相关产品推荐

