首页 > 解决方案 > Firebase函数不返回值

问题描述

我正在尝试使用 oncall 函数进行一些操作,我首先检查用户是否存在于数据库中,然后如果他存在,则执行一些操作,例如更新数据库。好吧,该函数按预期工作并更新了数据库,但它返回的响应为 null,所以我无法确定到底发生了什么。

exports.populateCart = functions.https.onCall((data, context) => {
    const user = context.auth.uid;

    DB.collection('users').doc(user).get().then((usr_resp) => {
        if (usr_resp.exists) {
            DB.collection('products').doc(data.productKey).get().then((prod_res) => {
                DB.collection('carts').add({
                    //some data
                }).then(() => {
                    return {
                        response: 'CART UPDATED'
                    };
                }).catch((carts_err) => {
                    return {
                        response: 'ERROR WHILE POPULATING CART : ' + carts_err
                    }
                });
            }).catch((prod_err) => {
                return {
                    response: 'ERROR WHILE FETCHING PRODUCT : ' + prod_err
                };
            });
        }
        else {
            return {
                response: 'USER DOES NOT EXISTS OR USER NOT AUTHENTICATED'
            };
        }
    }).catch((usr_err) => {
        return {
            response: 'ERROR WHILE FETCHING USER : ' + usr_err
        };
    });
});

还有一个关于堆栈溢出的类似问题,建议使用该解决方案,

reject(err);
resolve(lists);

方法,如果解决方案是使用上述方法,请详细说明该方法的用例,如果有更多这样的方法,请说明。

Firebase函数不返回数据

标签: node.jsfirebasegoogle-cloud-functions

解决方案


你没有兑现你的承诺。(见下文第 3 行)

exports.populateCart = functions.https.onCall((data, context) => {
    const user = context.auth.uid;
    // add return here before Db.collection()
    return DB.collection('users').doc(user).get().then((usr_resp) => { 
        if (usr_resp.exists) {
            return DB.collection('products').doc(data.productKey).get().then((prod_res) => {
              return  DB.collection('carts').add({
                    //some data
                }).then(() => {
                    return {
                        response: 'CART UPDATED'
                    };
                }).catch((carts_err) => {
                    return {
                        response: 'ERROR WHILE POPULATING CART : ' + carts_err
                    }
                });
            }).catch((prod_err) => {
                return {
                    response: 'ERROR WHILE FETCHING PRODUCT : ' + prod_err
                };
            });
        }
        else {
            return {
                response: 'USER DOES NOT EXISTS OR USER NOT AUTHENTICATED'
            };
        }
    }).catch((usr_err) => {
        return {
            response: 'ERROR WHILE FETCHING USER : ' + usr_err
        };
    });
});

推荐阅读