异步函数总是 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;
};
应该可以。如果这不起作用,请告诉我,我们将进行调试 :)
我正在使用 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;
};
应该可以。如果这不起作用,请告诉我,我们将进行调试 :)