Firebase ref.once() 被神秘地跳过

Firebase ref.once() is mysteriously skipped

我有一个使用 Firebase 的警报应用程序,当用户第一次使用它时,3 个示例任务会添加到列表并保存到 Firebase。为了防止再次添加这些示例任务,我的代码应该检查快照(Firebase 中的数据表示)并跳过 $scope.data.$add 部分。但是,每次刷新页面时,它都会继续添加额外的 3 个样本。

跟踪Chrome开发工具中的代码执行,刷新页面时跳过ref.once()块,因此未定义快照,这解释了示例任务的原因一次又一次地添加。

请告知我遗漏了什么。谢谢!

ref.once('value', function(snapshot) {

  $scope.total = snapshot.numChildren();
});


if ($scope.total == 0) {
  $scope.list = [
    {content: "9am", event: "Sam", bgColor: "#b58900"},
    {content: "9:30am", event: "Holley", bgColor: "#cb4b16"},
    {content: "10:30am", event: "Nick", bgColor: "#d33682"}

  ];

  $scope.list.forEach(function(item){
    $scope.data.$add({'content':item.content, 'event':item.event, 'bgColor':item.bgColor});
  });
}

将 if ($scope.total == 0) { ... } 块移动到 ref.once('value', function(snapshot) { .. } 中,并且有效. 问题是我的代码没有等待 firebase 的回调。希望这对某人有帮助。