我正在建立一个博客,并针对每个博客文章尝试包括作者姓名,而不是作者ID。
我有两个功能:getUserName
和mapData
。
mapData重新映射博客对象:
function mapData(posts) {
let result = [];
result = posts.map(post => ({
id: post._id,
title: post.title,
imageURL: post.imageURL,
body: post.body,
author: getUserName(post.createdBy),
date: date(post.createdAt)
}));
console.log(result)
return result;
}
getUserName获取用户名:
const getUserName = async id => {
try {
const getUser = await User.findById(id)
console.log(getUser)
return getUser.firstname;
} catch (err) {
throw err;
}
}
但是控制台在mapData
中记录结果后,author
的值为Promise { <pending> }
。谁能解释为什么会这样?我以为通过使用async
函数可以避免这种情况?
答案 0 :(得分:0)
一个异步函数返回一个Promise
。最简单的操作是将地图cb也标记为异步,然后await getUserName()
;
如评论中所述,这可能会有些混乱,因为之后您将要处理更多Promises
。如果您不想处理该问题,而您正在使用MongooseJS,则可以use Populate,对于author字段,它只需返回一个调用即可简单地返回所需的数据。