如何实现:迭代请求全为空执行操作,至少一个有结果执行另一操作?
批量请求后统一判断结果的修复方案
你的问题出在每个请求完成后单独判断并弹窗——哪怕有一个请求返回空数组,就会立刻弹出"Not Found",完全忽略了其他请求可能返回有效数据的情况。要实现「至少一个请求有结果就执行对应操作,全部为空才提示未找到」,得等所有请求都完成后再统一判断。
修改后的代码
<label for="truck">Truck:</label> <input type="text" id="truck" name="truck"> <button type="button" id="myButton">Click Me!</button> <script> const truckBtn = document.getElementById("myButton"); const truckID = document.getElementById("truck"); truckBtn.addEventListener("click", async () => { const arrs = ["one", "two", "three"]; // 收集所有请求的Promise对象 const requestPromises = arrs.map(arr => axiosFunction(arr, truckID.value)); try { // 等待所有请求完成,拿到所有返回结果 const allResults = await Promise.all(requestPromises); // 检查是否至少有一个结果的data长度大于0 const hasValidData = allResults.some(result => result.data.length > 0); if (hasValidData) { // 遍历所有有效结果,执行对应操作 allResults.forEach(result => { if (result.data.length > 0) { // do something,比如处理这个有效数据 console.log("处理有效数据:", result.data); } }); } else { // 所有请求都返回空数组时才弹窗 alert("Not Found"); } } catch (error) { // 处理请求失败的情况(比如网络错误) console.error("请求出错:", error); alert("请求失败,请稍后重试"); } }); </script>
关键说明
- 用
arrs.map()把每个请求包装成Promise放到数组里,避免循环里直接异步执行导致的顺序和判断混乱 Promise.all()会等待所有请求完成后再继续执行,确保能拿到全部结果再做统一判断Array.some()用来快速判断是否存在至少一个有效结果,比手动遍历更简洁高效- 新增
try/catch处理请求失败场景,避免单个请求报错导致整个逻辑中断
内容的提问来源于stack exchange,提问作者nb_nb_nb
相关产品推荐
相关产品推荐

