【发布时间】:2018-05-03 21:14:35
【问题描述】:
在我的 Angular 4 应用程序中,我使用 push() 方法将数据附加到 Firebase 实时数据库中的数据列表中。请参阅 Firebase 文档:https://firebase.google.com/docs/database/web/lists-of-data
每次将新子项添加到指定的 Firebase 引用时,push() 方法都会生成一个唯一键。这是一个数组“市场”,由 250 个对象组成,键为 symbol、price、balance:
market = [
{ symbol: '1ST', price_usd: 1, balance: 100},
{ symbol: '2ND', price_usd: 2, balance: 300},
{ symbol: '3RD', price_usd: 3, balance: 400}
// etc etc for a total of 250 objects
];
我在 Angular 4 组件中编写了以下代码:
import {AngularFireDatabase} from 'angularfire2/database';
import * as firebase from 'firebase';
constructor(private db: AngularFireDatabase) {}
storeTicker() {
const timestamp = firebase.database.ServerValue.TIMESTAMP;
for (let object of market) {
const path = object['symbol'];
const itemsRef = this.db.list('Tickers/' + path);
itemsRef.push({ symbol: path, price_usd: object['price_usd'], balance: object['balance'], time: timestamp});
}
}
当点击按钮时执行代码,这将导致每个引用的时间序列。
我的 Firebase 实时数据库如下所示:
{ "Tickers" : {
"1ST" : {
"-Kx8gN5uZALd5BP2GCH6" : {
"balance" : 0,
"price_usd" : 0.25583,
"symbol" : "1ST",
"time" : 1508769890908
}},
"2ND" : {
"-Kx8Z0xCl7ONZERk1ICo" : {
"balance" : 0,
"price_usd" : 0.0253829,
"symbol" : "2ND",
"time" : 1508769890908
}},
"3RD" : {
"-Kx8gN5FEZEPsOe8S-Tw" : {
"balance" : 0,
"price_usd" : 0.767354,
"symbol" : "3RD",
"time" : 1508769890908
}},
// for a total of 250 paths
}}
以这种方式对push() 的每次调用都会导致到 Firebase 的往返。问题是 Firebase 只对前 100 个引用执行 push()。
我在 Firebase 文档中找不到往返次数的限制:https://firebase.google.com/docs/database/usage/limits
我在 Stackoverflow Adding list of data in Firebase 上发现了一个类似问题的问题,但我不明白更新部分。
我的两个问题是:
Firebase 中是否存在最大往返次数或是否存在其他错误?
如何通过将代码组合到多位置更新中来使代码正常工作?
【问题讨论】:
-
我不确定我是否理解问题所在。代码不行吗?
-
代码有效,但 Firebase 在对象 nr 100 处停止:它只存储我的 250 个 Array 对象中的前 100 个。我最近才发现这个问题,我的数组以前是50个对象。
-
嗯...这听起来令人惊讶。你能在 jsbin 中重现它,让我看看吗?
-
我对 Angular4 很陌生,但我试图在 Plunker 中重现它:plnkr.co/edit/cPxdNsvEl25ipyhbGJJj?p=preview plunker 没有加载,我不完全理解所有 Angular 配置部分,但至少我的代码在那里,也许这有助于看看?
标签: angular typescript firebase firebase-realtime-database angularfire2