反应本机-异步等待的问题

时间:2020-05-22 03:14:55

标签: javascript react-native async-await

我有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';

3 个答案:

答案 0 :(得分:4)

您只需要等待_checkPermissions。由于_checkPermissionsasync函数,因此它返回一个承诺,该承诺将在以后的某个时间点解析/拒绝。您可以在保证中使用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。