首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何等待QueryDocumentSnapshot.docs.forEach结束返回

如何等待QueryDocumentSnapshot.docs.forEach结束返回
EN

Stack Overflow用户
提问于 2020-03-23 10:18:07
回答 2查看 275关注 0票数 0

我使用Firestore从一个集合中获取所有文档。我想等待从数据库返回的所有文档返回一个函数。此返回必须是从集合中获取的文档的数组。目前,我的控制台只打印了一个Promise变量。

代码语言:javascript
运行
复制
var getUsersSnapshot = async function() {
        var db = firebase.firestore()
        const usersSnapshot = await firebase
            .firestore()
            .collection("users")
            .get();
        var users = []
        await usersSnapshot.docs.forEach(element => {
            users.push(element.data())            
        });
        return users
}

var getMonthlyByUserId = function () {
    var users = getUsersSnapshot()
    console.log(users)
    return new Promise((resolve, reject) => {
        resolve()
    })
}

控制台中写入的值为:

在控制台上,我可以看到Promise,但我期望的是值的数组。

EN

回答 2

Stack Overflow用户

发布于 2020-03-23 11:26:29

因为getUsersSnapshot是一个async函数,所以在调用它时需要使用await

代码语言:javascript
运行
复制
var getMonthlyByUserId = async function () {
    var users = await getUsersSnapshot()
    console.log(users)
    return users;
}

使用Promise进行的整个构造似乎不必要,因为返回值已经被省略了。

你的getUsersSnapshot在我看来不同寻常。我通常希望看到它写成这样:

代码语言:javascript
运行
复制
var getUsersSnapshot = async function() {
    const usersSnapshot = await firebase
        .firestore()
        .collection("users")
        .get();
    var users = usersSnapshot.docs.map(element => element.data());
    return users
}
票数 1
EN

Stack Overflow用户

发布于 2020-03-23 10:57:18

您可以使用then()Promise中获取值

代码语言:javascript
运行
复制
var getMonthlyByUserId = function () {
    getUsersSnapshot().then((values) =>{
   console.log(values);
 });    
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60807170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档