【发布时间】:2019-12-22 01:06:16
【问题描述】:
我承诺 React Native AsyncStorage getItem 方法,但我被警告说它可能返回一个未处理的承诺拒绝。这是我在做什么,我的代码有什么问题?
在 App.js 中ComponentDidMount()
componentDidMount() {
ConnectyCube.init(...config);
authInitialization = async () => {
const locallyStoredPhoneNumber = await getStoredPhoneNumber();
console.log(locallyStoredPhoneNumber);
authorizeFirebase(this.getFirebaseAccessToken);
this.props.authorizing(true);
}
authInitialization();
}
然后在localStorage.js
export const getStoredPhoneNumber = () => {
return new Promise((resolve, reject) => {
AsyncStorage.getItem('@phone_number', (error, result) => {
result ? resolve(result) : reject(error);
})
})
}
提前致谢。
更新
我现在添加了错误处理:
export const getStoredPhoneNumber = () => {
return new Promise((resolve, reject) => {
AsyncStorage.getItem('@phone_number', (error, result) => {
result ? resolve(result) : reject(error);
})
}).catch(error => console.error(error))
}
似乎有效 - 这是我的额外逻辑,取决于 AsyncStorage 调用的结果:
componentDidMount() {
ConnectyCube.init(...config);
authInitialization = async () => {
const locallyStoredPhoneNumber = await getStoredPhoneNumber();
locallyStoredPhoneNumber !== undefined
? authorizeFirebase(this.getFirebaseAccessToken) && this.props.authorizing(true)
: this.setState({ newUser: true })
}
authInitialization();
}
【问题讨论】:
-
我的意思是......在该代码中没有任何地方处理被拒绝的承诺。如果一个承诺被拒绝,而你没有处理它,它就是“未处理”
-
谢谢@KevinB - 我现在明白了 - 正如你从
componentDidMount中的异步函数中看到的那样,我正在尝试做的是等待AsyncStorage调用得到解决然后移动通过其余的功能。 -
然后呢?您仍然没有处理任何可能发生的错误。不管你想做什么,你有没有错误处理的承诺。这就是错误告诉你的全部内容。
-
所以我在代码中没有
try catch块的原因是因为我试图承诺AsyncStorage调用的结果,所以我可以制作ComponentDidMountasync。也许我的问题应该是我怎样才能实现我刚才描述的。 -
我在Documentation 中关注
Signature。getItem(key: string, [callback]: ?(error: ?Error, result: ?string) => void): Promise
标签: javascript reactjs react-native async-await asyncstorage