是否有一种策略可以在当前的Firebase产品中运行,以检测服务器连接是否丢失和/或重新获得?
我正在考虑移动设备的一些离线意外事件,我想要一种可靠的方法来确定Firebase数据层何时可用.
我正在尝试使用Firebase数据视图创建一个孩子,但似乎这是不可能的,因为创建节点直接消失或者不会在任何时间显示.我试图将值字段留空,但这根本不起作用以及将null写入值字段.我做错了吗?
-Fabian
这是我的代码:
var userRef = new Firebase("https://awesome.firebaseio.com/users/");
var tokenRef = userRef.child(key+'/tokens');
tokenRef.once('value', function(snapshot){
var userTokenSync = $firebase(tokenRef);
var userTokens = userTokenSync.$asArray();
console.log(userTokens);
console.log(userTokens[0]);
for(var i=0, len = userTokens.length; i < len; i++) {
console.log(userTokens[i]);
}
console.log('done');
})
Run Code Online (Sandbox Code Playgroud)
这段代码从firebase获取用户的标记,我只想浏览标记数组.
这是控制台给我的东西:

如您所见,我无法访问该阵列.你知道我怎么能这样做吗?
提前致谢.
我在node.js库的源代码中找到了这段代码.~~对input变量有什么影响?
inArray[3] = ~~input;
Run Code Online (Sandbox Code Playgroud)
它还以其他方式使用:
return ~~ ((a - b) / 864e5 / 7 + 1.5);
Run Code Online (Sandbox Code Playgroud) 我想创建一个客户端可以放入请求的队列,然后服务器工作线程可以将它们拉出来,因为它们有可用的资源.
我正在探索如何使用Firebase存储库执行此操作,而不是外部队列服务,然后必须将数据注入Firebase.
考虑到安全性和验证工具,这里有一个简单的例子:

这可能有用的简化示例是身份验证:
(当然公共队列中仍然存在一些安全漏洞;我现在只是在探索)
其他一些用法示例:
所以问题是:
由于我的理解和SQL背景有限,我不太了解hasChild()和forEach()的用法; 他们觉得他们属于参考而不是快照.
(我将在其余的讨论中使用hasChild(),但这些概念是可以互换的.)
这是我的推理:
appname/usersvar users = new Firebase('appname/users')但我无法确定这里是否有孩子存在.所以这就是我现在拥有的:
users.child('Fred').once('value', function(snapshot) {
/** waits around forever if Fred doesn't exist */
});
Run Code Online (Sandbox Code Playgroud)
但这并不是很有效.所以现在我必须得到这样的东西的用户的价值(这感觉有点反直觉,因为我对用户不感兴趣):
var users = new Firebase('http://.../appname/users');
users.once('value', function(snapshot) {
snapshot.childExists('Fred', function(exists) {
/* do something here*/
});
});
Run Code Online (Sandbox Code Playgroud)
我不认为appname/users基于文档提取会产生很大的开销,但如果我只是想确定密钥'Fred'是否存在,这就像是一个难看的代码.
我希望看到类似的东西:
var users = new Firebase('http://.../appname/users');
users.hasChild('Fred', function(exists[, snapshotOfFred]) {
/* do something here*/
});
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来使用forEach/hasChild?我在这里错过了任何重要的逻辑考虑吗?
假设我的Firebase集合如下所示:
{
"max":5
"things":{}
}
Run Code Online (Sandbox Code Playgroud)
我如何使用max我的安全规则中的值来限制数量things?
{
"rules": {
"things": {
".validate": "newData.val().length <= max"
}
}
}
Run Code Online (Sandbox Code Playgroud) 我在Firefox 12中遇到了一个奇怪的问题.setTimeout()似乎并不总是等待适当的长度.或者也许这是没有jive的日期毫秒?
看看这个小提琴.从本质上讲,100ms的setTimeout似乎可以在80ms到110ms之间运行.根据John Resig对计时器的解释,我可以理解更多.但少?
您可能需要刷新一次或两次以查看问题,因为它有时在第一次运行时正常工作.它似乎在IE和Chrome中起着很大的作用.
这是我在小提琴中使用的代码:
var txt = '',
TIMEOUT_LENGTH = 100,
_now;
now = Date.now || function() { return new Date().getTime() };
function log(time) {
c = time < 100? 'class="error"' : '';
$('#log').append('<p '+c+'>waited ' + time + '</p>');
}
function defer() {
var d = $.Deferred(),
start = now();
setTimeout(function() {
d.resolve(now() - start);
}, TIMEOUT_LENGTH);
return d.promise();
}
for (var i = 0; i < 20; i++) {
defer().then(log);
}
Run Code Online (Sandbox Code Playgroud)
以下是古怪输出的示例:

这是我的浏览器信息: …
给定的起始日期/时间和持续时间,我怎样才能使服务器侧计算,其确定是否有物体"finished","in progress"或"upcoming"
--Show
--duration: "144"
--startDate: "2015-11-10"
--startTime: "14:00"
--status: "?"
Run Code Online (Sandbox Code Playgroud)
客户端javascript确定节目是否已经开始:
// if negative, then show hasn't started yet
var time = (-(startdate.getTime() - currentdate.getTime()) / 1000 / 60);
Run Code Online (Sandbox Code Playgroud)
客户端javascript确定节目是否已经完成运行:
// if negative, then show has finished
var timeLeft = channelDuration - timerStartTime;
Run Code Online (Sandbox Code Playgroud) 我正在使用firebase托管,我在firebase.json中设置了正确的url重写,如下所示:
"rewrites":
[{
"source": "**",
"destination": "/index.html"
}]
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,因为所有路由都应该通过index.html.但是,当我在路由中有一个以" - "开头的firebase对象ID时,它会抛出404.所以例如my-cool-app.firebaseapp.com/profiles/-JfZA03uAJI7rpqQg0sG会返回404.但是,如果我删除id中的破折号,那么路径似乎是正确重写.
这可能是什么问题?