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; } }
关键修复点
- 返回Promise链:原函数没有返回任何值,默认返回
undefined,await undefined会直接跳过等待,导致后续代码提前执行。修复后函数返回完整的Promise,await能正确等待流程结束。 - 传递内部Promise的返回值:原代码中
requestPermission的then返回值没有被外层捕获,现在通过return requestPermission(...)把结果传递到外层Promise。 - 错误处理返回默认值:在
catch块中返回false,避免错误导致Promise变为rejected,确保调用方始终能拿到布尔类型的结果。
这样修改后,你原来的调用代码let androidPermission = await hasAndroidPermission(); if (androidPermission) ...就能正常等待权限检查完成后再执行逻辑了。
内容的提问来源于stack exchange,提问作者gkeenley
相关产品推荐
相关产品推荐

