私の限られた理解と SQL のバックグラウンドにより、hasChild() と forEach(); の使用法を完全に理解しているわけではありません。スナップショットではなく参照に属しているように感じます。
(以降の説明では hasChild() を使用しますが、概念は交換可能です。)
これが私の推論です:
- users テーブルに対して呼び出される Firebase パスがあります。
appname/users
- ユーザー (Fred) が存在するかどうかを確認したい
- 私は参照を取得します:
var users = new Firebase('appname/users')
しかし、ここから子供が存在するかどうかは判断できません。だからここに私が今持っているものがあります:
users.child('Fred').once('value', function(snapshot) {
/** waits around forever if Fred doesn't exist */
});
しかし、それはうまくいきません。したがって、次のような方法でユーザーの値を取得する必要があります (私はユーザーに興味がないので、これは少し直感に反するように感じます)。
var users = new Firebase('http://.../appname/users');
users.once('value', function(snapshot) {
snapshot.childExists('Fred', function(exists) {
/* do something here*/
});
});
ドキュメントに基づいて、フェッチすることで大きなオーバーヘッドが発生するとは思いませんappname/users
が、キー「Fred」が存在するかどうかを判断したいだけの場合、これは見苦しいコードのように感じます。
私は次のようなものを見たいです:
var users = new Firebase('http://.../appname/users');
users.hasChild('Fred', function(exists[, snapshotOfFred]) {
/* do something here*/
});
forEach/hasChild を使用するより良い方法はありますか? ここで重要な論理的考慮事項を見逃していませんか?