Estoy tratando de obtener datos de stock de una API.
y quiero que se actualice cada 12:00 PM.
pero cuando trato de implementar estas funciones, usando
$firebase deployment --solo funciones
sale el error.
Error: no se pudo cargar la definición de la función desde el origen: no se pudo generar el manifiesto desde el origen de la función: RangeError: se excedió el tamaño máximo de la pila de llamadas
Esto es "index.ts" en funciones/src.
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; }) })Otras funciones funcionan bien. pero si incluyo este, no funciona.
¿Qué tengo que hacer?
Debido a que este es su archivo functions\src\index.ts , solo debe exportar Cloud Functions desde él y nada más.
Así que cambia:
// Initialize Firebase export const app = initializeApp(firebaseConfig); export const db = getFirestore(app);a:
// Initialize Firebase const app = initializeApp(firebaseConfig); const db = getFirestore(app); Si desea exportar un SDK de Firebase inicializado para usarlo en otro lugar, muévalo a su propio archivo llamado functions\src\firebase.ts (o similar):
// 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);entonces úsalo así:
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));