我正在尝试从api中获取股票数据。
我要每12点更新一次
但是当我尝试部署这个功能时,使用
$firebase部署-纯函数
错误出来了。
错误:从源加载函数定义失败:未能从函数源生成清单: RangeError:超过最大调用堆栈大小
这是函数/src中的"index.ts“。
import * as functions from "firebase-functions";
import axios from "axios"
import { doc, getFirestore, setDoc, Timestamp } from 'firebase/firestore'
import { format } from 'date-fns'
import { initializeApp } from "firebase/app";
const firebaseConfig = {
apiKey: "***********",
authDomain: "****",
projectId: "",
storageBucket: "",
messagingSenderId: "",
appId: "",
measurementId: ""
};
// Initialize Firebase
export const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);
const API_KEY = "****************"
interface Wow {
clpr: string
srtnCd: string
}
const today = new Date();
const yesterday = today.setDate(today.getDate() - 1);
const basDt = format(yesterday, 'yyyyMMdd')
export const getStocks = functions
.region('asia-northeast3')
.pubsub.schedule('12 00 * * *')
.timeZone('Asia/Seoul').onRun(async (context) => {
await axios.get(`https://api.odcloud.kr/api/GetStockSecuritiesInfoService/v1/getStockPriceInfo?numOfRows=3000&resultType=json&basDt=${basDt}&serviceKey=${API_KEY}`)
.then(response => {
const wow: Wow[] = response.data.response.body.items.item
wow.map((v, index) => {
setDoc(doc(db, 'KRX', v.srtnCd), { day: Timestamp.fromDate(today), price: v.clpr })
})
return null;
})
})另一种功能运行良好。但如果我把这个算进去,就不管用了。
我该怎么办?
发布于 2022-06-29 09:03:22
因为这是您的functions\src\index.ts文件,所以您应该只从它导出云函数,而不是其他任何东西。
因此,改变:
// Initialize Firebase
export const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);至:
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);如果要导出初始化的Firebase以供其他地方使用,请将其移动到自己的名为functions\src\firebase.ts (或类似)的文件中:
// firebase.ts
import { initializeApp } from "firebase-admin/app";
import { getFirestore } from "firebase-admin/firestore";
export const app = initializeApp(); // no arguments uses the default service account
export const db = getFirestore(app);然后像这样使用它:
import { app, db } from "./firebase.ts"
// NOTE: at time of writing, @google-cloud/firestore still uses the legacy namespaced syntax
db.doc("path/to/some/document")
.set({ /* data */ })
.then(() => console.log('success'))
.catch((err) => console.error('error', err));https://stackoverflow.com/questions/72795562
复制相似问题