繁体   English   中英

Firebase - 我可以将现有的 JSON 设置()到实时数据库中吗?

[英]Firebase - Can I set() existing JSON into Real-Time Database?

我正在制作一个应该显示实时足球数据的应用程序。 对于后端,我从 API 获取数据,并希望将其放入 Firebase 的实时数据库中,以便在应用程序中获取实时数据。 API的数据已经变成JSON了,请问有什么方法可以利用吗?

实时数据库的顶层应该是固定时间间隔的日期,在每个日期下,我想嵌套API的JSON数据。

下面是我目前正在尝试使用 set() 方法插入到实时数据库中的方式,但是,在其当前的 state 中没有任何反应。

import { initializeApp } from "firebase/app";
import { getDatabase, ref, set } from "firebase/database";
import { getDates } from './dates.js';
import { getDataApi, getCurrentSeason } from './api_manager.js';
import { idList } from '../data/data.js';

const firebaseConfig = {
...
};

const app = initializeApp(firebaseConfig);
const db = getDatabase();

function update() {
    var startDate = new Date();
    var season = getCurrentSeason().then(val => val);
    var datesArr = getDates(startDate, 7);

    datesArr.forEach(date => {
        idList.forEach(id => {
            const reference = ref(db, `${date}/${id}`);
            var data = getDataApi(date, id, season);
            set(reference, data);
        });
    });
}

update();

如果有任何兴趣,这些是我从 API 获取数据的方法:

import fetch from 'node-fetch';

const options = {
  method: 'GET',
  headers: {
    ...
  }
};

export async function getDataApi(date, leagueId, season) {
    const url = `https://api-football-v1.p.rapidapi.com/v3/fixtures?date=${date}&league=${leagueId}&season=${season}`;

    try {
        let response = await fetch(url, options);
        let json = await response.json();
        return json['response'];
    } catch (error) {
        console.log("Error: " + error);
    }
}

export async function getCurrentSeason() {
    const url = 'https://api-football-v1.p.rapidapi.com/v3/leagues?id=39&current=true';
    try {
        let response = await fetch(url, options);
        let json = await response.json();
        return json['response'][0]['seasons'][0]['year'];
    } catch (error) {
        console.log("Error: " + error);
    }

}

您的getCurrentSeasongetDataApi函数被标记为async ,但您在调用它们时没有使用await 即使是您调用的then()调用也不起作用,因为所有需要该值的代码都必须then()回调中。

一个简单的方法:

async function update() {
    var startDate = new Date();
    var season = await getCurrentSeason(); // 👈
    var datesArr = getDates(startDate, 7);

    datesArr.forEach(date => {
        idList.forEach(id => {
            const reference = ref(db, `${date}/${id}`);
            var data = await getDataApi(date, id, season); // 👈
            set(reference, data);
        });
    });
}

请注意,此代码仍将在您的update(); 调用返回,因此请检查您的进程是否过早终止。

一般来说,我建议阅读 JavaScript 中的异步操作,因为您会不断遇到这种情况。 一些更好的来源:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM