Flutter中Firebase实时数据库Snapshot代码执行异常求助
Firebase实时数据库循环停滞问题排查
可能的原因及解决方案:
数据库权限限制:如果当前用户没有
aaaaaaaaaaaaaaaaaaa/place/${i}路径的读取权限,get()请求会一直挂起,导致循环无法推进。检查数据库规则,确保允许当前身份(或匿名)读取目标路径,同时核对路径拼写是否与规则中的路径一致。无限循环风险:若
i对应的节点一直存在,且未设置循环上限,会导致循环无限执行,函数卡在此处无法继续。建议添加最大尝试次数限制,避免无限制遍历。网络请求卡住/超时:不稳定的网络会导致
get()请求超时或无响应,await会一直等待结果。可以用Future.timeout()给请求加上超时时间,超时后终止循环并抛出提示。路径拼写错误:如果父节点
aaaaaaaaaaaaaaaaaaa拼写错误,可能导致请求返回异常或卡住,仔细核对路径字符串是否与数据库中的节点名完全一致。
优化后的代码示例:
int maxAttempts = 100; // 限制最大遍历次数,防止无限循环 while(flag && i < maxAttempts){ print("i = ${i}"); try { // 给请求添加5秒超时 final snapshot2 = await ref.child('aaaaaaaaaaaaaaaaaaa/place/${i.toString()}') .get() .timeout(const Duration(seconds: 5)); print(snapshot2.value); if(snapshot2.exists){ print("Exists"); i++; }else{ print("Does not Exists"); flag = false; } } on TimeoutException { print("请求超时,终止循环"); flag = false; } catch (e) { print("请求失败: $e"); flag = false; } }
内容的提问来源于stack exchange,提问作者Mert
相关产品推荐
相关产品推荐

