firebase - Firebase Cloud Function 不会在函数中终止:shell
问题描述
我正在尝试将 JSON 导入到集合中。出于测试目的,我正在使用模拟器和文档创建触发器。
工作流程是:
- 启动模拟器
firebase emulators:start
- 在另一个终端中启动函数 shell
firebase functions:shell
(告诉我没有模拟器正在运行 btw) - 调用我的函数
tempoCF()
- 它运行并将文档添加到集合中,但该功能似乎没有终止。我不能调用另一个函数,需要按下
CTRL+C
才能在 shell 中再次写入。
这是我使用的功能:
const functions = require("firebase-functions");
const admin = require('firebase-admin');
const fetch = require('node-fetch');
admin.initializeApp();
const db = admin.firestore();
exports.tempoCF = functions
.firestore.document('/tempo/{docId}')
.onCreate(async (snap, context) => {
console.log("onCreate");
let settings = { method: "Get" };
let url = "https://opendata.paris.fr/api/records/1.0/search/?dataset=sanisettesparis&q=&rows=-1";
try {
let response = await fetch(url, settings);
let json = await response.json();
// TODO for each json object, add new document
return Promise.all(json["records"].map(toiletJsonObject => {
console.log(toiletJsonObject);
return db.collection('toilets').doc(toiletJsonObject["recordid"]).set({});
}));
}
catch(error) {
console.log(error);
return null;
}
}
);
我知道我可以使用模拟器 UI 创建一个触发 tempoCF 功能的新文档,它也可以正常工作,但我担心我的功能不正确并且可能会在生产中产生错误。
这是终端的屏幕截图。它打印日志,最后,无法在屏幕截图的最后一个空行上写任何内容。我在 Android Studio 中运行它,但我认为这并不重要。
解决方案
我不在 Windows 上,而是在 Mac 上,我可以通过调用函数在终端中重现您的问题tempoCF()
。不知何故,通过这样做,您正在模拟创建一个没有数据的 Firestore 文档。
但是如果我在调用云函数时传递了一些数据,例如tempoCF({foo: "bar"})
(即为onCreate
操作提供新的测试数据),我可以在 CF 完成后写入终端。有关更多详细信息,请参阅文档。
推荐阅读
- mysql - R 和 RMySQL 无法将表写入 MySQL 数据库
- algorithm - 如何在两点之间绘制直线并避开障碍物?
- angular - 是否可以在 Angular 应用程序中添加重定向(301)?
- c++ - Configure_file 一次创建目录及其子目录,一次不创建
- python - 当我无权访问父证书时如何使用 Python 请求信任服务器证书
- codenameone - 代号一上的 Toolbar.getBackButton
- excel - 如何从 Excel VBA 将动态名称设置为 PDF 范围
- c# - 如何构建自定义 WebApi 路由,例如“package/{packageName}/{controller}”以路由到单独程序集中的应用程序部件?
- javascript - vue中如何给对象添加属性
- c - 正则表达式在 c 中不匹配,但适用于在线解释器