异步函数总是 return 空白数组

Async function always return blank array

我正在使用 NodeJs 并尝试从云 Firestore 收集数据。我想将 GetDataPassword 函数的返回值与字符串进行比较,但出现了问题。我的函数正常工作,但是当我将它与字符串进行比较时,它总是不匹配(返回值(xxxxx)和字符串“xxxx”),并且总是转到“else”。我计算返回值的类型,它说对象。但有时它会返回 {}。请帮助我。

const loginUser = (request, h) => {
  const { username, password } = request.payload;

  async function GetDataUsername(db) {
    const dataUsername = db.collection('users').doc('' + username);
    const uname = await dataUsername.get().then(function (doc) {
      return doc.data().username;
    });
    return uname;
  }

  async function GetDataPassword(db) {
    const dataUsername = db.collection('users').doc('' + username);
    const pass = await dataUsername.get().then(function (doc) {
      return doc.data().password;
    });
    return pass;
  }
  const dataUsername = GetDataUsername(db);
  const dataPassword = GetDataPassword(db);

  if (username == dataUsername && password == dataPassword) {
    return h
      .response({
        status: 'success',
        message: 'Login berhasil',
        data: {
          username,
        },
      })
      .code(200);
  }
  const response = h
    .response({
      status: 'fail',
      message: 'Login gagal',
    })
    .code(400);
  return response;
};

如果您正在使用 await,则无需使用 .then()。此外,函数 GetDataUsername 和 GetDataPassword return 都承诺因此您应该使用 await.

const loginUser = async (request, h) => {
    //Do note the ^^^^^ async 
    const { username, password } = request.payload;
  
    async function GetDataUsername(db) {
      const dataUsername = db.collection('users').doc('' + username);
      const uname = (await dataUsername.get()).data().username
      return uname;
    }
  
    async function GetDataPassword(db) {
      const dataUsername = db.collection('users').doc('' + username);
      const pass = (await dataUsername.get()).data().password
      return pass;
    }
    const dataUsername = await GetDataUsername(db);
    const dataPassword = await GetDataPassword(db);
  
    if (username == dataUsername && password == dataPassword) {
      return h
        .response({
          status: 'success',
          message: 'Login berhasil',
          data: {
            username,
          },
        })
        .code(200);
    }
    const response = h
      .response({
        status: 'fail',
        message: 'Login gagal',
      })
      .code(400);
    return response;
  };

应该可以。如果这不起作用,请告诉我,我们将进行调试 :)