繁体   English   中英

当条件为真时,如何使 ECMAScript6 function 从循环返回?

[英]How do I make an ECMAScript6 function return from a loop when a condition is true?

我有这个简单的问题,我无法解决这个问题。 我正在遍历从数据库返回的结果集以查看用户名是否被占用。 如果找到,则 function 应返回错误,并且不应允许用户注册。 它工作了一秒钟,但随后 state 值没有更新,因此 function 继续运行并且在发现用户名已被占用时不会返回并且无论如何都会注册用户。

  const [status, setStatus] = React.useState({ text: "", color: "" });
  const [newUser, setNewUser] = React.useState({
    Username: "",
    Password: "",
    admin: false,
    wishlist: [],
    cart: [],
  });

const Signup = async (e) => {
    e.preventDefault();
    setStatus({});
    const srcData = await getDocs(collection(db, "users"));
    const id = srcData.size + 1;
    debugger;
    srcData.forEach((doc) => {
      const info = doc.data();
      console.log(info);
      if (info.Username === newUser.Username) {
        setStatus({
          text: "this userName is taken, please try a new UserName",
          color: "#CE000E",
          userTaken: true,
        });
      }
    });
    pushData(id, newUser);
  };
  const pushData = (id, data) => {
    if (status.userTaken === true) {
      /* here userTaken should be true but its false */ return;
    } else {
      setDoc(doc(db, "users", id.toString()), data);
      setStatus({
        text: "successfully signed up! you can now login!",
        color: "#019945",
      });
    }
  };

所以我设法让它工作,答案很简单,首先我确定了我想要的数据,然后我在上面使用了一些

const Signup = async (e) => {
    e.preventDefault();
    setStatus({});
    const srcData = await getDocs(collection(db, "users"));
    const cleanData = [];
    const id = srcData.size + 1;
    srcData.forEach((doc) => {
      const info = doc.data();
      cleanData.push(info);
      
    });
    if (
      cleanData.some((data) => {
        return data.Username === newUser.Username;
      })
    ) {
      setStatus({
        text: "this userName is taken, please try a new UserName",
        color: "#CE000E",
      });
      return;
    } else {
      setDoc(doc(db, "users", id.toString()), data);
      setStatus({
        text: "successfully signed up! you can now login!",
        color: "#019945",
      });
    }
  };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM