Android 尽管执行成功,但Firebase可调用函数结果在客户端中始终为空

Android 尽管执行成功,但Firebase可调用函数结果在客户端中始终为空,android,firebase,google-cloud-functions,Android,Firebase,Google Cloud Functions,我正在尝试从android执行一个可调用的函数 控制台中的函数执行日志显示在没有任何错误的情况下接收和执行调用 客户端中的可调用任务在函数执行后接收结果,未报告异常 但是,收到的结果为空 这是函数代码- const Translate = require('@google-cloud/translate'); const projectId = functions.config().firebase; const translate = new Translate({ projectId:

我正在尝试从android执行一个可调用的函数

  • 控制台中的函数执行日志显示在没有任何错误的情况下接收和执行调用
  • 客户端中的可调用任务在函数执行后接收结果,未报告异常
  • 但是,收到的结果为空
  • 这是函数代码-

    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);
      });
    });
    
    这是控制台日志-

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

    这是客户端代码-

    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;
                    }
                });
    }
    
    private Task translateMessage(字符串文本、字符串目标语言){
    //创建可调用函数的参数。
    映射数据=新的HashMap();
    数据输入(“文本”,文本);
    data.put(“target_language”,targetLanguage);
    FirebaseFunctions mFunctions=FirebaseFunctions.getInstance();
    返回函数
    .GetHttpScalable(“translateMessage”)
    .呼叫(数据)
    .continueWith(新的continueWith(){
    @凌驾
    公共字符串(@NonNull Task)引发异常{
    字符串结果=(字符串)task.getResult().getData();
    d(标记“Result in callable callback:”+Result);
    返回结果;
    }
    });
    }
    
    可调用回调中的结果始终为null


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

    我已经想出了一个解决方案,我的Javascript幼稚是罪魁祸首

    看起来只有当我使用两个return语句时,实际的字符串才会被发送回客户机。实际承诺前面的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);
      });