在“等待"方法完成之前执行的方法 [英] Method executed before 'await' method complete

查看:143
本文介绍了在“等待"方法完成之前执行的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试从checkPermissions()返回值后执行setState,但是 async-await 没有完成该工作.

Trying to perform setState after the value return from checkPermissions(), however async-await didn't do the job.

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

I can't spot anything incorrect here, can you point out my mistake? FYI checkPermissions() accept a callback function as parameter.

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)

Check Permissions Code (Android)

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

解决方案尝试但失败了: 仅打印Run first,不打印Run after.

Solution tried but failed: Only Run first is printed out, Run after does not.

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')});

    });
  }

推荐答案

您大概正在寻找

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一个承诺,不想传递回调.

You can only await a promise, you don't want to pass a callback.

这篇关于在“等待"方法完成之前执行的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆