【问题标题】:Firestore cloud functions summing subcollections valuesFirestore 云函数对子集合值求和
【发布时间】:2018-12-10 23:08:38
【问题描述】:

伙计们,我正在处理这个 firebase 项目,我需要迭代处理根集合中所有商店的所有销售额的子集合,并将它们的值相加......我遇到的问题是我m 在迭代之前打印总和。我是 TS 和 Firebase 的新手……这就是我目前得到的:

export const newBilling = functions.firestore.document('billings/{billId}').onCreate(event => 
{
    const valueArray = []
    const feeArray = []

    const storesCollection = afs.collection('stores').where('active', '==', true).get().then(stores => { 
        stores.forEach(store => {
            const salesCollection = afs.collection('stores').doc(store.id).collection('sales').get().then(sales => {
                sales.forEach(sale => {
                    return valueArray.push(sale.data().value) + feeArray.push(sale.data().fee) 
                    // other aproach 
                    // valueArray.push(sale.data().value)
                    // feeArray.push(sale.data().fee)
                })
            })
        })
    }).catch(error => {console.log(error)})

    let cashbackSum, feeSum : number

    cashbackArray.forEach(value => {
        cashbackSum += value
    })
    feeArray.forEach(value => {
        feeSum += value
    })

    console.log(cashbackSum, feeSum)
    return 0
})

TKS =)

【问题讨论】:

    标签: javascript firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    您没有正确使用 Promise。你有很多 get() 方法调用,每一个都是异步的并返回一个承诺,但你从来没有使用它们来让整个函数等待所有工作完成。调用 then() 实际上并不会让你的代码等待——它只是运行下一段代码并返回另一个 Promise。您的最终 console.log 将首先执行,因为您在它之前启动的工作还没有完成。

    您的代码实际上需要有很大的不同才能正常工作,并且您需要从整个函数返回一个承诺,该承诺只有在所有工作完成后才会解析。

    通过video tutorials,您可以更好地了解如何在 Cloud Functions 中使用 Promise。

    【讨论】:

    • 谢谢道格!我真的认为 .then() 会让函数等待.. 现在看着你 =)!
    猜你喜欢
    • 2020-08-10
    • 1970-01-01
    • 2021-04-11
    • 2021-11-16
    • 1970-01-01
    • 2021-03-10
    • 2021-02-09
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多