Javascript Firebase函数-计划函数不断抛出错误“;“未经验证的”;
我正在制作一个“定时”firebase函数,该函数从外部API源获取数据并将其保存在firestoreJavascript Firebase函数-计划函数不断抛出错误“;“未经验证的”;,javascript,node.js,firebase,google-cloud-platform,google-cloud-functions,Javascript,Node.js,Firebase,Google Cloud Platform,Google Cloud Functions,我正在制作一个“定时”firebase函数,该函数从外部API源获取数据并将其保存在firestore const functions = require("firebase-functions"); const admin = require("firebase-admin"); const { default: Axios } = require("axios"); admin.initializeApp(); exports.g
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const { default: Axios } = require("axios");
admin.initializeApp();
exports.getIndexData = functions.pubsub.schedule('every 5 minutes').onRun(async() => {
try {
const response = await Axios(
"https://financialmodelingprep.com/api/v3/quotes/index?apikey=myAPIKEY"
);
const data = response.data;
const writeResult = await admin
.firestore()
.collection("index")
.doc("sorted-index")
.set({ indexData: data,timeStamp:Date.now()});
} catch (error) {
console.log(error);
}
return null;
});
这是我的firebase函数代码。当我单独运行该功能时,它工作得非常好,并且我还使用“谷歌云平台云功能测试”对该功能进行了测试。当我单独运行一个函数时,数据在firestore成功设置
然而,当我部署函数时,它不起作用,我认为这是关于预定函数的东西
{
"insertId": "184t0npf9hhej7",
"jsonPayload": {
"pubsubTopic": "projects/my-project/topics/firebase-schedule-getIndexData-us-central1",
"targetType": "PUB_SUB",
"status": "UNAUTHENTICATED",
"jobName": "projects/my-project/locations/us-central1/jobs/firebase-schedule-getIndexData-us-central1",
"@type": "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"
},
"resource": {
"type": "cloud_scheduler_job",
"labels": {
"job_id": "firebase-schedule-getIndexData-us-central1",
"project_id": "my-project",
"location": "us-central1"
}
},
"timestamp": "2020-12-09T08:48:01.142830977Z",
"severity": "ERROR",
"logName": "projects/my-project/logs/cloudscheduler.googleapis.com%2Fexecutions",
"receiveTimestamp": "2020-12-09T08:48:01.142830977Z"
}
所以我一直在搜索这个未经验证的错误,人们说我需要更改一些权限选项。所以我给了allUsers和allAuthenticated用户一个云函数调用器权限。仍然不起作用
对此有什么想法或解决办法吗?谢谢。您忘记在您的论点中包含“上下文”。
我不知道这是否是您的问题的原因,但您应该只执行
返回null代码>当所有异步工作完成时。具体来说,您应该移动返回null代码>就在try()中的const writeResult=wait admin…
之后。您还应该将其添加到catch()
中的console.log()
之后。您能否正确地查看所指示的主题和函数(云调度程序中的日志是否更清楚该问题?)@Juancki不知何故通过使用function.https东西并将google scheduler设置为每5分钟获取一次url,而不是pubsub,获得了相同的结果。但仍然没有和pubsub一起工作。。pubsub继续发送此未经验证的错误代码。“我一直在挖,”雷纳德塔内克说,“我会试试的。”。该函数在google cloud中的测试中运行良好。我今天没有做任何事情就自动修复了它。我对这个答案非常怀疑,因为我没有使用任何参数,Javascript也没有施加任何参数限制。。但它不知怎么为我解决了?我正在使用typescript,并从另一个文件中导出该方法,如下面的export async function myFunction(context:EventContext){}
.onRun(async (context) => { ... })