当前位置: 首页 > 知识库问答 >
问题:

firebase云功能控制台存在奇怪的问题。日志

曹成双
2023-03-14

我在firebase云功能中遇到了一个情况,其中只有第一个控制台。执行日志或firestore更新语句。

我还有其他类似的函数,在处理响应的方式上略有不同,但这没有任何问题

我已经检查了谷歌云控制台/Firebase控制台等,源代码似乎已经正确上传

exports.myFunction = functions.firestore.document(docPath).onCreate(async (snapshot, context) => {

  var inputData = snapshot.data();
  console.log('printing request');
  console.log(inputData);

  //Prepare to call the api
  var data = {'input': 'some value'};
  var resource = 'api_resource';

  // call api - below function is provided by an external provider and takes a callback function once api call is complete

  myApi.call(resource, data.input, function (error, result) {
    if (error) {
      console.log('Error from api');
      return { status: 'error', code: 401, message: 'Error from api' }
    }

    var apiResult = JSON.parse(result);
    console.log('printing api response'); // <-- Anything below this does not get executed. When this is removed, next line is executed and so on 
    console.log(apiResult);  

    //Write to Firestore
    snapshot.ref.update({
      'status': 'computed',
    })
      .then((a) => {
        console.log('Written successfully to db');
        return 0;
      })
      .catch(err => {
        console.log('Error setting db' + err);
        return { status: 'error', code: 401, message: 'Error setting db ' }
      });

    // console.log('End of function');
    return { status: 'success', code: 200, message: 'Completed successfully' }
  });
});

我看到了另一个与这种情况相反的帖子。有人知道为什么会这样吗?

共有1个答案

程峻
2023-03-14

您需要将您的同步API包装在一个promise中—这里和这里的详细信息。

代码可能类似于:

exports.myFunction = functions.firestore.document(docPath).onCreate( (snapshot, context) => {

  var data = 'some value'
  var resource = 'api_resource';

  const myAPIPromise = (resource, data) => {
    return new Promise((resolve, reject) => {
      myApi.call(resource, data, (error, result) => {
        if (error) reject(error)
        else resolve(result)
      });
    })
  }

  myAPIPromise(resource, data)
  .then((result) => console.log(result))
  .catch((err) => console.log(err))

});

很明显,你会想要添加回所有无关的日志,并调用我为了清晰起见删除的Firepose。

 类似资料:
  • 刚开始使用Ruby,我无法通过下面发布的错误。这是我的代码: 控制台中的错误: C: /Ruby23/lib/ruby/2.3.0/net/http。rb:933:inconnect来自C:/Ruby23/lib/ruby/2.3.0/net/http。rb:863:instart'来自C:/Ruby23/lib/ruby/2.3.0/net/http。rb:1398:inperform'来自C:

  • null 云存储桶是云功能工作所必需的吗?如果没有,我怎么能回到这些变化发生之前的地方。请引导我。

  • 如何控制hadoop中的日志功能?Hadoop使用默认的log4j.properties文件来控制日志。我的用例是控制我的类生成的日志。 Hadoop守护进程(如JobTracker、TaskTracker、NameNode和DataNode守护进程)使用log4j。属性文件来自各自主机节点的。rootLogger设置为“INFO,console”,它将所有信息级别的消息记录到控制台。 我使用Oo

  • 问题内容: 让我们考虑以下代码: 运行此代码段时,我将显示以下输出: 为什么我会得到不同的时区? 请注意,如果我将8月的第一个日期设置为9月,将第二个日期设置为9月,则在两种情况下输出将显示相同的时区: 将显示: 我正在使用Java 1.6.0_14 问题答案: 是中欧夏季时间。它与夏令时生效相同。

  • 问题内容: 我看到一个奇怪的错误消息,并且正在寻找一些有关问题可能出在哪里的想法。我是使用JPA的新手。 我有一个应用程序,在其中使用Spring的实体管理器工厂(LocalContainerEntityManagerFactoryBean),EclipseLink作为我的ORM提供程序,并连接到MySQL数据库并由Maven构建。我不确定这是否重要..... 当我将此应用程序部署到Glassfi