【问题标题】:firestore update value in array inside docdoc内数组中的firestore更新值
【发布时间】:2021-04-30 19:29:47
【问题描述】:

我看了几个小时的 firestore 文档,但仍然没有找到解决这个案例的方法。 我需要添加一个 ammout 功能来生产我的电子商务应用程序。

数据结构: 主集合是“购物车”,文档是用户电子邮件。

这是添加或设置产品的当前代码:

import firebase from 'firebase';


export async function addToCart(userMail, itemId, name, url, price, category, type, description) {
    const ammout = 1
    const cartItem = { itemId, name, url, price, category, type, description, ammout }
    if (userMail === undefined) throw console.error('please Login');

    const userDoc = await firebase.firestore().collection("cart").doc(userMail)

    await userDoc.get().then((doc) => {
        if (doc.exists) {
            (async () => {
                    

                await userDoc.update({
                    item: firebase.firestore.FieldValue.arrayUnion(cartItem),
                })
            })()
        }
        else {
            (async () => {
                await userDoc.set({
                    item: firebase.firestore.FieldValue.arrayUnion(cartItem)
                })
            })()
        }

    })
}

【问题讨论】:

    标签: reactjs firebase google-cloud-firestore


    【解决方案1】:

    问题可能是您在同一个函数中同时使用了awaitPromise.then(),这可能会造成一些同步问题,您也不需要await 来设置userDoc 变量已填充,正如您在 firestore documentation example 上看到的那样。

    所以基本上我会从你的代码中删除所有async/await,因为它们并不是真正需要的,.get() 上的Promise.then() 足以确保你的代码中的同步性,看起来像这样:

    export function addToCart(userMail, itemId, name, url, price, category, type, description) {
        const ammout = 1
        const cartItem = { itemId, name, url, price, category, type, description, ammout }
        if (userMail === undefined) throw console.error('please Login');
    
        const userDoc = firebase.firestore().collection("cart").doc(userMail)
    
        userDoc.get().then((doc) => {
            if (doc.exists) {
                userDoc.update({
                    item: firebase.firestore.FieldValue.arrayUnion(cartItem),
                })
            }
            else {
                userDoc.set({
                    item: firebase.firestore.FieldValue.arrayUnion(cartItem)
                })
            }
    
        })
    }
    

    【讨论】:

    • 那是另一个问题,我会查一下,ty。
    • @YanivCode 那是另一个问题是什么意思?
    猜你喜欢
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2020-10-06
    • 2022-11-18
    • 2019-05-28
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    相关资源
    最近更新 更多