我有一个数组的值,我需要通过这些循环运行一个函数的基础上的值,我从一个文本框。
我的代码:
<label for="truck">Truck:</label>
<input type="text" id="truck" name="truck">
<button type="button" id="myButton">Click Me!</button>
const truckBtn = document.getElementById("myButton");
const truckID = document.getElementById("truck");
truckBtn.addEventListener("click", () => {
let arrs = ["one", "two", "three"];
for (const arr of arrs) {
axiosFunction(arr, truckID.value).then(d=> {
console.log(d.data);
if (d.data.length > 0) {
// do something
} else alert("Not Found");
});
}
});
所以d.data
如果truckID.value
匹配我需要的,则响应是:
[]
[]
[{...}]
这就是它进入if
语句的时候。
另一种情况是:
如果truckID.value
不匹配我需要的响应是:
[]
[]
[]
我的问题是,当我有else
,它去其他即使有匹配。当数组的长度大于0且至少有一次迭代时,有没有办法写一个if语句?如果所有迭代都返回长度为0,则执行else?
4条答案
按热度按时间gopyfrb31#
如果您可以重写
axiosFunction
背后的API,以获取所有三个arr
值并返回一个批处理,那么您就不会进行多次往返,这将是理想的。但是假设你不能这样做,并且你可以等待所有的往返返回(否则你不知道它们是否都返回空的),你可以使用Promise.all()
来等待,直到它们都被解析。这段代码使用
find
,假设您只需要一个有效的结果。如果可能有几个,你可以调整它使用filter
。bvn4nwqk2#
将回调函数设置为一个pwdc函数,这样就可以使用
await
。然后,您可以根据任何调用是否返回某些内容来设置一个变量。iovurdzv3#
这也取决于你打算如何在数组中循环-你想:
找到匹配项后,可以使用
break
扩展您的示例:当找到匹配项时,请注意条件中的
break
-这将阻止对axiosFunction
的任何后续调用,这可能是也可能不是您想要的。下面是处理调用的几种方法,具体取决于您是要等待每个调用,获取第一个匹配结果,还是使用
async / await
和Array.map
获取所有匹配结果:mo49yndu4#
当您使用
axiosFunction
发出多个请求时,首先需要使用Promise.allSettled()
或Promise.all()
解析这些promises。然后,您可以使用
Array.prototype.some()
或Array.prototype.every()
来检查返回的数据,看起来您需要嵌套其中两个,因为您的结果是一个包含更多数组的数组。下面是一个模拟
axiosFunction
的例子。在输入字段中键入foo
作为一个结果,或者键入其他内容作为“未找到”: