android - 尽管执行成功,Firebase 可调用函数结果在客户端中始终为 null

标签 android firebase google-cloud-functions

我正在尝试从 android 执行 Callable 函数。

  1. 功能执行登录控制台显示调用已被接收和执行,没有任何错误。
  2. client中的可调用任务在函数执行后收到结果,没有异常报告。
  3. 但是,收到的结果为空。

这是函数代码-

const Translate = require('@google-cloud/translate');
const projectId = functions.config().firebase;

const translate = new Translate({
  projectId: projectId,
});

exports.translateMessage = functions.https.onCall((data, context) => {

  let text = data.text;
  let targetLanguage = data.target_language;
  let uid = context.auth.uid;

  console.log("incoming text: " + text)
  console.log("incoming uid: " + uid)
  console.log("incoming target: " + targetLanguage)

  //In future, check if uid or custom claim has quota
  if(!uid)
    return text;

  translate
  .translate(text, targetLanguage)
  .then(results => {
    const translation = results[0];

    console.log("translated text: " + translation)
    return Promise.resolve(translation);
    //also tried returning json like: return {translationText: translation};
  })
  .catch(err => {
    console.log(err)
    return Promise.reject(err);
  });
});

这是控制台日志- enter image description here

正如您将看到的,就在返回带有翻译文本的 promise 之前,它已成功记录到控制台。我还通过返回翻译文本本身而不是 promise 来进行测试。在客户端仍然为空。

这是客户端代码-

private Task<String> translateMessage(String text, String targetLanguage) {
    // Create the arguments to the callable function.
    Map<String, Object> data = new HashMap<>();
    data.put("text", text);
    data.put("target_language", targetLanguage);

    FirebaseFunctions mFunctions = FirebaseFunctions.getInstance();

    return mFunctions
            .getHttpsCallable("translateMessage")
            .call(data)
            .continueWith(new Continuation<HttpsCallableResult, String>() {
                @Override
                public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
                    String result = (String) task.getResult().getData();
                    Log.d(TAG, "Result in callable callback: " + result);
                    return result;
                }
            });
}

可调用回调的结果始终为空。

知道如何获得实际响应吗?

最佳答案

我找到了一个解决方案,我的 Javascript 天真是罪魁祸首。

看起来只有当我使用两个 return 语句时,实际的字符串才会被发送回客户端。实际 promise 前面的 return 关键字丢失了......

return translate
  .translate(text, targetLanguage)
  .then(results => {
    const translation = results[0];

    console.log("translated text: " + translation)
    return Promise.resolve(translation);
  })
  .catch(err => {
    console.log(err)
    return Promise.reject(err);
  });

关于android - 尽管执行成功,Firebase 可调用函数结果在客户端中始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50740737/

相关文章:

java - 如何改变图片按钮的背景资源来实现开关机

Android SDK 管理器无法解析 xml

android - 使我的 Android 应用程序在启用时进入完全信息亭模式

firebase - 如何正确地进行树抖动以减少包大小并为每个云功能单独入口点

firebase - 对 Firebase 身份验证帐户的密码实现自定义规则

express - Firebase Nodejs函数设置cookie TypeError : option sameSite is invalid

android - NoClassDefFoundError 实现 IdlingResource

python - 解析为 Firebase 增强型推送通知

firebase - 使用物理设备运行简单的Firebase Flutter应用程序并获得Gradle错误

Firebase多语言密码重置电子邮件