[英]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¤t=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);
}
}
您的getCurrentSeason
和getDataApi
函数被标记为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.