[AngularFire] Resolve snapshotChanges doesn't emit value when data is empty
Updated to AngularFire2 v5.0.
One important change is that you need to call .snapshotChanges() or .valueChanges() to get data as Observable back.
    return this.db.list<Skill>(`skills/${this.uid}`)
      .snapshotChanges()
The problem is when there is no data, .snapshotChanges() never emit a value.
Luckly it is Observable, we can solve the problem by using .startWith():
  getSkills(): Observable<Skill[]> {
    return this.db.list<Skill>(`skills/${this.uid}`)
      .snapshotChanges()
      .startWith([])
      .map((actions) =>
        actions.map((action) => ({$key: action.key, ...action.payload.val()}))
      );
  }
If there is no data coming back from firebase, we still emit a empty array. This is much friendly if you work with Ngrx. Because if you depends on .snapshotChange() to emit a value back to switch map to next action, it might just block there, and your next action will never get dispatched.
[AngularFire] Resolve snapshotChanges doesn't emit value when data is empty的更多相关文章
- [AngularFire] Firebase OAuth Login With Custom Firestore User Data
		import { NgModule } from '@angular/core'; import { AuthService } from './auth.service'; import { Ang ... 
- Angular $scope和$rootScope事件机制之$emit、$broadcast和$on
		Angular按照发布/订阅模式设计了其事件系统,使用时需要“发布”事件,并在适当的位置“订阅”或“退订”事件,就像邮箱里面大量的订阅邮件一样,当我们不需要时就可以将其退订了.具体到开发中,对应着$s ... 
- Emit学习(4) - Dapper解析之数据对象映射(一)
		感觉好久没有写博客了, 这几天有点小忙, 接下来会更忙, 索性就先写一篇吧. 后面估计会有更长的一段时间不会更新博客了. 废话不多说, 先上菜. 一.示例 1. 先建类, 类的名称与读取的表名并没有什 ... 
- es6中promise ALL Race Resolve Reject finish的实现
		function mypromise(func){ this.statue = "pending"; this.data = null; this.resolveCallback ... 
- AngularJS路由系列(5)-- UI-Router的路由约束、Resolve属性、路由附加数据、路由进入退出事件
		本系列探寻AngularJS的路由机制,在WebStorm下开发.主要包括: ● UI-Router约束路由参数● UI-Router的Resolve属性● UI-Router给路由附加数据● UI- ... 
- angular之$broadcast、$emit、$on传值
		文件层级 index.html <!DOCTYPE html> <html ng-app="nickApp"> <head> <meta ... 
- seajs源码分析
		seajs主要做了2件事 1.定义什么是模块,如何声明模块:id.deps.factory.exports ----define=function(id,deps,factory){return ex ... 
- 自己修改的两个js文件
		sea-base.js /** * Sea.js 2.2.3 | seajs.org/LICENSE.md */ (function(global, undefined) { // Avoid con ... 
- Dapper的完整扩展(转)
		真心想说:其实...我不想用Dapper,如果OrmLite.Net支持参数化的话,也就没Dapper的什么事情了,对于OrmLite.Net只能做后续跟踪...... 这个其实是看了Dapper作者 ... 
随机推荐
- AtCoderBeginner091-C 2D Plane 2N Points 模拟问题
			题目链接:https://abc091.contest.atcoder.jp/tasks/arc092_a 题意 On a two-dimensional plane, there are N red ... 
- easyui-combobox实现取值范围的联动
			需求:需要用两个combobox来输入一个年月的范围,下拉框的内容从服务器获取.需要实现选中前者后,后者的下拉框中不能显示比前者数值小的:选中后者后,前者的下拉框内容不能显示比后者数值大的 有两个co ... 
- 去除windows编辑文本中的回车符
			情景描述: 最近,huskiesir的朋友遇到了一个很奇葩的问题.那就是他在windows上搭建了一个http服务,把A脚本放在了上面并用linux去下载和执行,但是在执行的时候出现了问题,在linu ... 
- 紫书 习题 10-2 UVa 808(建立坐标+找规律)
			这次是我遇见过最迷的一次 我写的程序uDebug全过 和ac程序对拍也过,求出来的坐标是一模一样的,最后结果输出的方式也是一样的 交上去就是错的 迷 第一次遇到这种情况 大佬在哪里 #include& ... 
- 洛谷P5082 成绩
			原来的空间限制是5MB,其实是很足够的,现在调成128MB,变成了没有思维难度的大水题. 不过,我还是想说一下空间限制为5MB的解题思路. 题目要求的是(每一科的满分之和*3-每一科的实际得分之和*2 ... 
- HTML学习----------DAY1  第一节
			什么是 HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (ma ... 
- C++ priority_queue的使用 & Java PriorityQueue
			刚刚那道BST的题目,也用到了priority_queue,那是那个没有定义比较函数. 那么下面这个,就要定义比较函数. 它的模板声明带有三个参数,priority_queue<Type, Co ... 
- awk条件语句
			条件语句用于在运行操作之前做一个測试.在前面的章节中,我们看到了模式匹配规则的一些演示样例. 模式匹配规则本质上就是影响输入循环的条件表达式. 在这一部分,我们主要就在action中所使用的条件语句进 ... 
- Flask Flash闪现
			Flash介绍以及工作方式 flash中添加消息 取出flash中的消息 Flash介绍以及工作方式 - 介绍: flash :闪现 一个好的应用和用户界面都需要良好的反馈. 如果用户得不到足够的反馈 ... 
- 1.9 Python基础知识 - 数值运算
			一.数值运算 在Python中有丰富的算术运算,这使得Python在科学计算领域有着很高的地位,Python可以提供包括四则运算在内的各种算术运算. 算术运算符 运算符 含义 说明 优先级 实例 ... 
