【问题标题】:TypeError: Cannot read property '0' of undefined when trying to read from firebaseTypeError:尝试从firebase读取时无法读取未定义的属性'0'
【发布时间】:2019-10-23 13:25:05
【问题描述】:

我已尝试阅读类似问题的答案,但无法解决我的功能。

我正在构建一个优惠券应用程序,我现在正在开发重新获取优惠券的功能。我设计它的方式是,每周一次,该功能将遍历应该再次出现的优惠券列表,并为下一周创建类似的优惠券。 然后从列表中删除之前的优惠券。

我目前已将功能设置为 2 分钟的时间间隔来检查功能,我一直收到此错误

Function returned undefined, expected Promise or value

随后出现此错误:

TypeError: Cannot read property '0' of undefined 但我不明白为什么。

这是我的功能:

exports.createRecurringDeals = functions.pubsub.schedule('every 2 minutes').timeZone('Asia/Jerusalem').onRun((context) => {
    db.collection('recurring_deals').get().then(querySnapshot => {

        querySnapshot.forEach(bus => {
            const businessListDoc = bus.data();

            if (businessListDoc !== undefined) {

                return db.doc('businesses/' + bus.id).get().then(busDoc => {

                    const business = busDoc.data();

                    if (business !== undefined) {

                        businessListDoc.list.forEach((deal:string) => {
                            return db.doc('deals/' + deal).get().then(snapshot => {
                                const oldDeal = snapshot.data();
                                if (oldDeal !== undefined) {

                                    const promises: any = [];

                                    const startTime = oldDeal.startTime + oldDeal.interval;
                                    const endTime = oldDeal.endTime + oldDeal.interval;

                                    const newDealDoc = db.collection('deals').doc();

                                    const newDeal = {
                                        id: newDealDoc.id,
                                        business_ID: business.id,
                                        business_name: business.name,
                                        business_address_text: business.address_text,
                                        business_address_lat: business.address_lat,
                                        business_address_long: business.address_long,
                                        business_phone_number: business.phone_number,
                                        business_image: business.restaurant_photos[0],
                                        business_categories: business.categories,
                                        business_sub_categories: business.sub_categories,
                                        discount: oldDeal.discount,
                                        timestamp_start: startTime,
                                        timestamp_end: endTime,
                                        gmt: oldDeal.gmt,
                                        amount: oldDeal.amount,
                                        claimers: [],
                                        active: true
                                    };

                                    promises.push(newDealDoc.set(newDeal));

                                    promises.push(db.doc('recurring_deals/' + business.id).update({ list: FieldValue.arrayRemove(oldDeal.id) }));

                                    promises.push(db.doc('recurring_deals/' + business.id).update({ list: FieldValue.arrayUnion(newDeal.id) }));

                                    return Promise.all(promises).catch(err => console.log(err));

                                } else {
                                    return null;
                                };
                            }).catch(err => console.log(err));
                        });
                        return null;
                    } else {
                        return null;
                    };
                }).catch(err => console.log(err));
            } else {
                return null;
            };
        });
        return null;
    }).catch(err => console.log(err));
});

这就是我的数据的结构:

企业文件:

交易文件:

然后这些是经常性交易清单的文件。请注意,这些文件的 ID 与其所属的企业相同:

我一直在执行该函数,所有数据似乎都在正确的位置,没有拼写错误,为什么它不起作用?

【问题讨论】:

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


    【解决方案1】:

    问题很可能出在这一行:

    business_image: business.restaurant_photos[0] 
    
    1. 尝试检查您的拼写
    2. 检查您的数据库是否包含给定字段
    3. 检查该字段是否为数组

    【讨论】:

    • 太棒了!就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2018-09-19
    相关资源
    最近更新 更多