Flutter/Dart async异步函数返回两个不同结果的问题咨询
问题原因解析
核心问题1:return的作用域错误
你在then回调中写的return true,仅会作为当前then回调函数的返回值,传递给then方法自身返回的Future对象,完全不会终止外层verifySometing函数的执行,也不能作为外层函数的返回值。
核心问题2:异步语法混用&语法错误
你的代码同时混用了await和then两种异步处理逻辑,且在未标记async的then回调中使用了await validateData(...),这本身属于语法错误,会进一步打乱执行逻辑。
实际执行流程
- 进入函数后执行
await getCloudData().then(...),等待getCloudData返回结果后传入then回调执行 - 回调中校验通过后打印
Data is correct,return的true仅作为then回调的返回值,不会跳出外层函数 then回调执行完毕后,await的逻辑结束,代码继续往下执行,触发print('Something went wrong'),最终外层函数返回false
你感知到的“先返回true后返回false”是误解:前者是then回调的返回值,后者才是外层函数实际的返回值。
修复方案
建议完全使用await语法替代then,逻辑更清晰不易出错:
static Future<bool> verifySometing() async { try { final snapshot = await getCloudData(); if (snapshot.exists && snapshot.hasData) { bool dataValid = await validateData(snapshot.data); if (dataValid) { print('Data is correct'); return true; } } } catch (e) { print('Error $e'); return false; } print('Something went wrong'); return false; }
内容的提问来源于stack exchange,提问作者Geralt von Riva
相关产品推荐
相关产品推荐

