我有2个函数调用:
const result = _checkPermissions();
if (result === 'granted') {
this._googleSignIn();
}
我希望_checkPermissions()
在运行if语句之前返回.....但是我似乎无法做到这一点,并且代码继续执行_checkPermissions()
返回之前的if语句。
我知道它与异步等待有关,但我无法弄清楚
以下是_checkPermissions()
export const _checkPermissions = async () => {
const result = await check(
Platform.select({
android: PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION,
ios: PERMISSIONS.IOS.LOCATION_WHEN_IN_USE,
}),
);
switch (result) {
case 'blocked':
return 'blocked';
case 'granted':
return 'granted';
答案 0 :(得分:4)
您只需要等待_checkPermissions
。由于_checkPermissions
是async
函数,因此它返回一个承诺,该承诺将在以后的某个时间点解析/拒绝。您可以在保证中使用await,也可以在保证中的.then
块内编写。
承诺方式:
const result = await _checkPermissions();
if (result === 'granted') {
this._googleSignIn();
}
await
,则需要将async
添加到父函数中。* .then
方法:
_checkPermissions().then(result => {
if (result === 'granted') {
this._googleSignIn();
}
})
答案 1 :(得分:3)
您仍然需要在_checkPermissions()前面等候
const result = await _checkPermissions();
if (result === 'granted') {
this._googleSignIn();
}
答案 2 :(得分:0)
尽管添加await是一个完美的选择,但是如果您未获得所需的结果,则可以使用setInterval 在if result =='granted'
下if (result === 'granted') {
setInterval(() => {
this._googleSignIn();
},2000)
}
您的this._googleSignIn();
将在2秒钟后运行,直到您的诺言得到解决..这只是一个小技巧,更好的答案是使用await。