You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Cloud Function如何正确返回布尔值且符合Promise要求?

Firebase可调用函数返回布尔值的正确方式

问题

Firebase Cloud Function最终必须返回Promise。当使用可调用函数,且客户端希望获取布尔值时,我们应返回已解析为该布尔值的Promise,还是可以直接返回布尔值?

原代码示例

exports.doesUserExistAtPhoneNumber = onCall(async (request) => {
    const phoneNumber = request.data.phoneNumber;

    try {
        const db = getFirestore();
        const snapshot = await db.collection("userAccounts").where("phoneNumber", "==", phoneNumber).get();

        if (snapshot.empty) {
            // 当前手机号无关联用户
            return Promise.resolve(false);
        } else {
            // 当前手机号已存在关联用户
            return Promise.resolve(true);
        }
    } catch (error) {
        throw new HttpsError("unknown", error);
    }
});

解答

直接返回布尔值就行,没必要用Promise.resolve()包装。

因为你的函数是async函数,所有async函数的返回值都会被自动包装成已解析的Promise。比如写return false;,和写return Promise.resolve(false);的效果完全一样,async函数会帮你完成这个包装步骤。

你可以把代码简化成这样:

exports.doesUserExistAtPhoneNumber = onCall(async (request) => {
    const phoneNumber = request.data.phoneNumber;

    try {
        const db = getFirestore();
        const snapshot = await db.collection("userAccounts").where("phoneNumber", "==", phoneNumber).get();

        // 直接返回布尔值,async函数自动转为Promise
        return !snapshot.empty;
    } catch (error) {
        throw new HttpsError("unknown", error);
    }
});

这样写更简洁清晰,和原代码的功能完全一致,Firebase可调用函数会正确处理这个返回值,客户端最终拿到的就是解析后的布尔结果。

内容的提问来源于stack exchange,提问作者lurning too koad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:12:54