返回Promise {<pending>}作为对象值

时间:2019-11-02 14:46:52

标签: javascript mongodb

我正在建立一个博客,并针对每个博客文章尝试包括作者姓名,而不是作者ID。

我有两个功能:getUserNamemapData

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函数可以避免这种情况?

1 个答案:

答案 0 :(得分:0)

一个异步函数返回一个Promise。最简单的操作是将地图cb也标记为异步,然后await getUserName();

如评论中所述,这可能会有些混乱,因为之后您将要处理更多Promises。如果您不想处理该问题,而您正在使用MongooseJS,则可以use Populate,对于author字段,它只需返回一个调用即可简单地返回所需的数据。