在“等待”方法完成之前执行的方法

时间:2020-08-18 04:26:44

标签: javascript react-native asynchronous async-await react-native-push-notification

尝试从checkPermissions()返回值后执行setState,但是 async-await 没做。

我在这里找不到任何不正确的地方,您能指出我的错误吗? 仅供参考checkPermissions()接受回调函数作为参数。

async componentDidMount() {
    let authorizationStatus = false;
    await PushNotification.checkPermissions(function(permissions) { 
      console.log(permissions); 
      authorizationStatus = permissions.alert
      console.log('Run first')
    });

    console.log('Run after')
    this.setState({
     authorizationStatus,
    });
  }

检查权限代码(Android)

@ReactMethod
    public void checkPermissions(Promise promise) {
      ReactContext reactContext = getReactApplicationContext();
      NotificationManagerCompat managerCompat = NotificationManagerCompat.from(reactContext);
      promise.resolve(managerCompat.areNotificationsEnabled());
    }

解决方案尝试但失败了: 仅打印出Run first,没有打印出Run after

async componentDidMount() {
    let authorizationStatus = false;
    PushNotification.checkPermissions(function(permissions) { 
      console.log(permissions); 
      authorizationStatus = permissions.alert
      console.log('Run first')
      this.setState({
       authorizationStatus,
      },()=>{console.log('Run after')});

    });
  }

1 个答案:

答案 0 :(得分:0)

您大概正在寻找

async componentDidMount() {
  const permissions = await PushNotification.checkPermissions();
  console.log(permissions); 
  const authorizationStatus = permissions.alert
  console.log('Run first');

  console.log('Run after')
  this.setState({authorizationStatus});
}

您只能await个承诺,不想传递回调。