从 firebase 可调用函数接收返回的数据 [英] Receiving returned data from firebase callable functions

查看:24
本文介绍了从 firebase 可调用函数接收返回的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 iOS 中的 Callable HTTPS 函数.我已经创建并部署了以下函数:

I'm playing with Callable HTTPS-functions in iOS. I've created and deployed the following function:

export const generateLoginToken = functions.https.onCall((data, context) => {

    const uid = data.user_id
    if (!(typeof uid === 'string') || uid.length === 0) {
        throw new functions.https.HttpsError('invalid-argument', 'The function must be called with one argument "user_id" ');
    }

    admin.auth().createCustomToken(uid)
    .then((token) => {
        console.log("Did create custom token:", token)
        return { text: "some_data" };
    }).catch((error) => {
        console.log("Error creating custom token:", error)
        throw new functions.https.HttpsError('internal', 'createCustomToken(uid) has failed for some reason')
    })
})

然后我从我的 iOS 应用程序中调用该函数,如下所示:

Then I call the function from my iOS-app like this:

let callParameters = ["user_id": userId]
    self?.functions.httpsCallable("generateLoginToken").call(callParameters) { [weak self] (result, error) in
    if let localError = self?.makeCallableFunctionError(error) {
        single(SingleEvent.error(localError))
    } else {
        print("Result", result)
        print("data", result?.data)
        if let text = (result?.data as? [String: Any])?["text"] as? String {
            single(SingleEvent.success(text))
        } else {
            let error = NSError.init(domain: "CallableFunctionError", code: 3, userInfo: ["info": "didn't find custom access token in the returned result"])
            single(SingleEvent.error(error))
        }
    }
}

我可以在日志中看到使用正确参数在服务器上调用了该函数,但我似乎无法获取从该函数返回到应用程序的数据.似乎 result.data 值是 nil 出于某种原因,即使我 return {text: "some_data"} 从云函数.怎么会?

I can see on the logs that the function is invoked on the server with the right parameters, but I can't seem to the get data that is being returned from the function back into the app. It seems that the result.data value is nilfor some reason, even though I return {text: "some_data"} from the cloud function. How come?

推荐答案

Yikes!问题是我忘记从云函数返回实际的承诺.此功能有效:

Yikes! The issue was that I forgot to return the actual promise from the cloud function. This function is working:

export const generateLoginToken = functions.https.onCall((data, context) => {

    const uid = data.user_id
    if (!(typeof uid === 'string') || uid.length === 0) {
        throw new functions.https.HttpsError('invalid-argument', 'The function must be called with one argument "user_id" ');
    }

    return admin.auth().createCustomToken(uid)
    .then((token) => {
        console.log("Did create custom token:", token)
        return { text: "some_data" };
    }).catch((error) => {
        console.log("Error creating custom token:", error)
        throw new functions.https.HttpsError('internal', 'createCustomToken(uid) has failed for some reason')
    })
})

这篇关于从 firebase 可调用函数接收返回的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆