我有一个userService模块:
class UserService {
constructor(reference) {
this.usersRef = reference;
}
async getUser(uid) {
let docs;
await this.usersRef.where('uid', '==', uid).get()
.then(result => {
result.forEach(doc => {
return doc.data();
});
});
}
}
我得到了在服务中调用getUser(uid)函数的以下路由:
router.route('/mp3').post((req, res) => {
var storage = multer.diskStorage({
destination: './files/',
filename: function (req, file, cb) {
cb(null, "test" + ".mp3");
}
});
var upload = multer({ storage: storage }).any();
upload(req, res, async (err) => {
if(err) {
console.log(err);
return res.end("Error uploading file.");
} else {
let user = userService.getUser('AhtlOSge59bGGuKd43dEjUgt7Di4');
user.then(function(result) {
// this is undefined
console.log(result)
});
}
});
});
所以在第二个代码块中,我试图记录调用getUser(uid)的结果,但是它似乎是未定义的?
答案 0 :(得分:1)
您的return doc.data()
语句实际上没有向getUser
的调用者返回任何内容。 getUser
当前返回始终解析为undefined
的Promise,因为getUser
从不返回实际值。 (此外,您的docs
变量不会执行任何操作-它永远不会被使用。)
请注意,您的return语句仅返回传递给forEach
的匿名函数的值。该返回值不会转义该微小函数。如果要返回与查询匹配的第一个文档,则需要安排通过从QuerySnapshot中提取文档来直接从getUser
返回。
async getUser(uid) {
const snapshot = await this.usersRef.where('uid', '==', uid).get()
if (snapshot.size > 0) {
return snapshot.docs[0].data();
}
}