javascript - 非异步函数中的 AsyncStorage
问题描述
以下代码:
_loginAsync = async () => {
fetch('localhost:3000/login')
.then((response) => response.json())
.then((responseJson) => {
await AsyncStorage.setItem('my-item', responseJson.item);
this.props.navigation.navigate('Home');
})
.catch((error) => {
console.error(error);
});
}
抛出错误:Can not use keyword 'await' outside an async function
。
哪种方法是正确的估价方法my-item
?
解决方案
您的.then
回调未标记为async
,只有外部_loginAsync
函数是。
_loginAsync = async () => {
fetch('localhost:3000/login')
.then((response) => response.json())
.then(async (responseJson) => {
await AsyncStorage.setItem('my-item', responseJson.item);
this.props.navigation.navigate('Home');
})
.catch((error) => {
console.error(error);
});
}
也就是说,在这里混合所有.then
和await
形式似乎很奇怪。
仅使用异步/等待
我认为这是最易读的版本。我们只是使用 async/await 直接等待获取,而不是使用它的承诺。
_loginAsync = async () => {
try {
const response = await fetch('localhost:3000/login');
await AsyncStorage.setItem('my-item', response.json().item);
this.props.navigation.navigate("Home")
} catch(error) {
console.error(error);
}
}
直接使用 Promise
您可以(几乎)始终将 async 函数用作返回 Promise 的普通函数。因此,await
我们AsyncStorage.setItem
可以通过从then
.
_loginAsync = () => {
fetch('localhost:3000/login')
.then((response) => response.json())
.then((responseJson) => AsyncStorage.setItem('my-item', responseJson.item))
.then(() => this.props.navigation.navigate('Home'))
.catch((error) => {
console.error(error);
});
}
推荐阅读
- ios - iOS identifierForVendor 是否可以复制?
- c# - TPL Dataflow Pipeline 中的工作单元问题
- c# - 如何创建预定义类型 xamafin 表单 UI 的 X 元素
- arduino - SIM 800L 无法连接到
- python - 如何在两台电脑之间建立无线连接?
- java - 如何使用 TCP/IP 打印机端口自动执行打印功能?
- java - 无法创建我的 AndroidViewModel 的实例
- discord.py - discord.py 对具有特定角色的用户运行命令
- c# - 在动态 JSON 结果中查找值
- java - 为什么我的输出没有保存为文件?