簡體   English   中英

使用 firebase 函數將數據添加到 firestore 數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM