![](/img/trans.png)
[英]Firebase Cloud function not updating data in Firestore database
[英]Adding data to firestore database with firebase functions
我從外部 api 獲取的數據未保存在 firestore 數據庫中
但我添加為姓氏 xxxxx 的記錄成功等待 db.collection('coins').add({lastName: 'xxxxxxx'}) 這有效但下面的代碼不起作用
exports.firestoreKaydet = functions.firestore
.document("/users/{userId}")
.onCreate(async (snap, context) => {
await db.collection("coins").add({ lastName: "xxxxxxx" });
fetch(
"https://api.coinecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=100&page=1&sparkline=true"
)
.then((response) => response.json())
.then(async (data) => {
data.forEach(async (coin) => {
await db.collection("coins").add({
name: coin.name,
});
});
})
.catch((error) => {
console.error(error);
});
});
您不應在forEach()
循環中使用async/await
,請參閱“ JavaScript:async/await with forEach() ”和“ Using async/await with a forEach loop ”。
您可以按如下方式使用Promise.all()
:
exports.firestoreKaydet = functions.firestore.document('/users/{userId}').onCreate(async (snap, context) => {
try {
// db shall be defined as admin.firestore()
await db.collection('coins').add({ lastName: 'xxxxxxx' });
const response = await fetch("https://api.coinecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=100&page=1&sparkline=true");
const data = response.json();
const promises = [];
data.forEach(coin => {
promises.push(db.collection('coins').add({
name: coin.name
}));
});
return Promise.all(promises);
} catch (error) {
console.error(error);
return null;
}
});
更新:幫助您調試后,似乎未安裝fetch
。 安裝在functions
目錄下,如下
npm install node-fetch
然后將下面的行放在index.js
文件中:
import fetch from "node-fetch";
const { request } = require('express');
const admin = require('firebase-admin');
const functions = require('firebase-functions');
admin.initializeApp();
const db = admin.firestore();
exports.firestoreKaydet=functions.firestore.document('/users/{userId}')
.onCreate(async (snap, context) => {
const response = await
fetch('https://api.coingecko.com/api/v3/coins/markets?
vs_currency=usd&order=market_cap_desc&per_page=100&page=1&sparkline=true');
const data = response.json();;
const promises = [];
await data.forEach(async coin => {
promises.push(db.collection('coins').add({
name: coin.name
}));
});
return Promise.all(promises)
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.