首页 > 解决方案 > 我怎样才能使这个console.log在上面的功能完成后执行?

问题描述

我正在使用firebase,但遇到了问题。我要做的是允许用户注册,但要检查该帐户不存在,我想从 firestore 检索所有用户名,然后搜索它们以查看他们建议的用户名是否已经存在。这是我的代码:

document.querySelector("#form1").addEventListener("submit", e => {
    e.preventDefault();
    var users;
    firestore.collection("users").get().then(querySnapshot => {
        users = querySnapshot.docs.map(doc => doc.data());
        console.log(users);
    });
    console.log(users);
});

所以我知道当我第二次尝试执行 console.log(users) 时,上面的函数可能没有完成它的执行,这就是为什么当我将它记录到控制台时我看到“未定义”的原因。如何更改我的代码,以便第二个 console.log(users) 等待上述功能完成?

我尝试对此进行调查,发现一些与“异步”和“等待”有关的东西,但我无法弄清楚如何在我的代码中使这些工作。也许这可能是解决方案?

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


我不能警告你足够多,不要让所有人users检查其中一个是否具有相同的用户名。我强烈建议查询具有相同用户名的单个用户:

document.querySelector("#form1").addEventListener("submit", async (e) => {
  e.preventDefault();

  const theEnteredUsername = ""; // get it from somewhere

  // Create a reference to the cities collection
  var ref = firestore.collection("users");

  // Create a query against the collection.
  var query = await ref.where("username", "==", theEnteredUsername).get();

  if (query.empty) {
    //you can use the username
  } else {
    //username taken!!!
  }
});

否则,您的 Firebase 账单将随着您应用中用户的增加而大幅增长。


推荐阅读