Облачные функции Firestore суммируют значения подколлекций - PullRequest
0 голосов
/ 11 декабря 2018

Слушайте, ребята, я работаю над этим проектом Firebase, и мне нужно перебрать всю подборку всех продаж всех магазинов в корневой коллекции и суммировать их значения ... проблема в том, что яполучая сумму, напечатанную до итерации.Я новичок в 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 =)

1 Ответ

0 голосов
/ 11 декабря 2018

Вы не правильно используете обещания.У вас много вызовов метода get (), каждый из которых является асинхронным и возвращает обещание, но вы никогда не используете их для обработки всей функции в ожидании завершения всей работы.Вызов then () фактически не заставляет ваш код ждать - он просто запускает следующий бит кода и возвращает другое обещание.Ваш последний файл console.log выполняется первым, потому что ни одна из работ, начатых вами до этого, еще не завершена.

Для правильной работы ваш код должен существенно отличаться, и вам нужно вернуть обещаниеиз всей функции, которая разрешается только после завершения всей работы.

Вы можете лучше узнать, как использовать обещания в облачных функциях, пройдя через видеоуроки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...