You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中如何让代码等待hasAndroidPermission函数执行完成?

解决React Native权限检查函数无法被await等待的问题

你的问题核心是**hasAndroidPermission函数没有返回Promise对象**,同时内部Promise链的返回值也没有正确传递,导致await无法等待整个权限流程完成,后续代码会提前执行。

修复后的代码(Promise链式写法)

function hasAndroidPermission() {
  // 必须返回整个Promise链,让await能捕获到结果
  return checkPermission('camera')
    .then(res => {
      if (res === RESULTS.DENIED) {
        // 这里也要return请求权限的Promise,传递返回值
        return requestPermission('camera')
          .then(requestRes => {
            // 简化判断:只要不是拒绝就返回true
            return requestRes !== RESULTS.DENIED;
          })
          .catch(err => {
            console.log(err);
            // 捕获请求权限的错误,返回false
            return false;
          });
      } else {
        // 已有权限,直接返回true
        return true;
      }
    })
    .catch(err => {
      console.log(err);
      // 捕获权限检查的错误,返回false
      return false;
    });
}

更易读的async/await写法

async function hasAndroidPermission() {
  try {
    const checkRes = await checkPermission('camera');
    if (checkRes === RESULTS.DENIED) {
      const requestRes = await requestPermission('camera');
      return requestRes !== RESULTS.DENIED;
    }
    // 权限已授予
    return true;
  } catch (err) {
    console.log(err);
    // 任何错误场景都返回false
    return false;
  }
}

关键修复点

  1. 返回Promise链:原函数没有返回任何值,默认返回undefined,await undefined会直接跳过等待,导致后续代码提前执行。修复后函数返回完整的Promise,await能正确等待流程结束。
  2. 传递内部Promise的返回值:原代码中requestPermission的then返回值没有被外层捕获,现在通过return requestPermission(...)把结果传递到外层Promise。
  3. 错误处理返回默认值:在catch块中返回false,避免错误导致Promise变为rejected,确保调用方始终能拿到布尔类型的结果。

这样修改后,你原来的调用代码let androidPermission = await hasAndroidPermission(); if (androidPermission) ...就能正常等待权限检查完成后再执行逻辑了。

内容的提问来源于stack exchange,提问作者gkeenley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:20:29