如何使用React.js检查Firebase实时数据库中是否已存在指定id
你写的重复校验逻辑存在逻辑漏洞,嵌套的map和for-in循环不仅冗余,还会出现只要第一个遍历到的订单id不匹配,就直接判定为无重复的错误,哪怕后续有相同id的订单也检测不到。另外你对fetch返回值的判断也不对,fetch只要成功发出请求就会返回response对象,哪怕接口返回404、500等错误状态也不会返回空值,需要判断response.ok属性才能确认请求是否真的成功。
可以直接用数组内置的some()方法完成存在性判断,该方法会遍历数组,只要有一个元素满足判断条件就会直接终止遍历返回true,所有元素都不满足才返回false,刚好适配你的使用场景,修正后的完整代码如下:
export async function progressOrders (found){ const loadedOrders = await fetchOrders('progress'); // 校验是否存在相同id的订单 const isOrderExisted = loadedOrders.some(order => order.id === found.id); console.log(isOrderExisted); if(isOrderExisted){ alert('Order already in progress state'); }else{ const response = await fetch(`${FIREBASE_DOMAIN}/progressOrders.json`,{ method:"POST", headers:{ "Content-Type": "application/json" }, body: JSON.stringify({ id: found.id, dryFruit: found.dryFruit, weight: found.weight, canteenName: found.canteenName, orderQuantity: found.orderQuantity, newOrderTime: found.newOrderTime }) }); // 校验请求是否真正成功 if(!response.ok){ throw Error('Order not in progress'); }else{ alert('Order is in progress now.'); }; } };
内容的提问来源于stack exchange,提问作者Nikita Pandey
相关产品推荐
相关产品推荐

