gpt4 book ai didi

javascript - 函数在不应该异步运行时异步运行

转载 作者:行者123 更新时间:2023-11-30 08:18:50 25 4
gpt4 key购买 nike

我正在实现一些函数,从 firebase 中检索一些数组类型的数据,然后从该数组中搜索特定元素,如果存在,我想中止该函数并返回给调用者。( react native 应用程序)

代码如下:

ref.get().then(snapshot => {
const personArr = snapshot.data().winPerson;

...

if (personArr != undefined) {
personArr.forEach(item => {
if (item == uid.uid) {
alert(`already subscribed`);
return;
}
});

if (prop.first.length != 0) {
uploadHelper(ref, prop, "first");
}

...
}
});

我使用 forEach 遍历数组并查看是否有匹配的元素。如果有匹配,那么它应该提醒并返回调用函数而不运行下面的后续代码,即

if (prop.first.length != 0) {
uploadHelper(ref, prop, "first");
}

但是,假设该元素确实存在于数组中,该代码同时运行警报和 uploadHelper 函数(通过日志检查)。首先我认为 forEach 是异步函数,所以 uploadHelper 在返回之前执行;但是,forEach 不是异步函数(经过一些谷歌搜索)。

我不知道为什么 uploadHelper 在代码落入 if (item == uid.uid) 条件并返回时运行。

任何帮助表示赞赏。谢谢

最佳答案

它正在返回调用函数:) forEach() 正在调用每个元素的函数。所以你正在返回,但只是从那个元素的函数返回。

我认为您需要一个 for of 循环。想做函数式编程的人想用.forEach,但是用一个for of达到和.forEach一样的功能效果(不必索引,没有副作用)并且使用起来可能更直接。 (如果想在每个元素之间等待的地方编写异步代码,forEach 也会有问题)

所以,像这样重写你的代码:

for (const item of personArr) {
if (item == uid.uid) {
alert(`already subscribed`);
return;
}
}

关于javascript - 函数在不应该异步运行时异步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57321464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com