【发布时间】:2017-10-19 12:37:54
【问题描述】:
是否可以在类之外使用 async/await? 例如,我使用 AsyncStorage 存储访问令牌,并希望在 StackNavigator 初始化之前获取此令牌。
container.js
import React from 'react';
import { StackNavigator } from 'react-navigation';
import PairingView from '../components/PairingView';
import MainView from '../components/MainView';
import { getTokenFromStorageAsync } from '../helpers/asyncStorageHelper';
const accessToken = getTokenFromStorageAsync().done();
console.log(accessToken); <---------- undefined
const AppNavigator = StackNavigator({
PairingRoute: {
screen: PairingView
},
MainRoute: {
screen: MainView
}
}, {
initialRouteName: (accessToken == null) ? 'PairingRoute' : 'MainRoute',
initialRouteParams: {
token: accessToken
}
});
const App = () => (
<AppNavigator />
);
export default App;
asyncStorageHelper.js
import { AsyncStorage } from 'react-native';
export const getTokenFromStorageAsync = async () => {
try {
const value = await AsyncStorage.getItem('@nfs:token');
console.log(value); <---------- access token
if (value != null)
return value;
} catch (err) {
console.error(err);
}
return undefined;
};
【问题讨论】:
-
const accessToken = await getTokenFromStorageAsync();
-
@ponury-kostek await 只能用于异步函数
-
对不起我的错误。所以改成getTokenFromStorageAsync().then(token => console.log(token));
-
async/await是今年发布 (ES2017) 的一部分,而不是去年发布 (ES7/ES2016) 的一部分。请阅读标签说明。