Firebase一旦(“值”)触发“然后”和“捕获”

时间:2019-01-25 15:48:49

标签: angular firebase

我想知道,我有两个函数,一个正在被另一个加载。

对于错误处理,我同时使用了thencatch。函数then的{​​{1}}和catch工作正常,但函数A()的{​​{1}}和then-{{1} }和catch被触发,因此我无法放置正确的消息。

B()

console.log输出

then

因此,我尝试开发以下情况:1:页面ID无效,2:项目ID无效-我想放置适当的味精。

但是我不确定为什么它在功能catch中可以正常工作,对于功能A() { if ( this.page_id ) { this.fireDB.database.ref(`/pages/${page_id}`).once("value").then(snapshot => { this.Page = snapshot.toJSON(); console.log(this.CTRL, "[VALID] Page.id:", this.Page.id); // Load item's details in page this.B(); }).catch(() => { console.log(this.CTRL, "[FAILED] Page ID not found"); this.has_errors = true; this.error_image = "Page could not be found"; }); } } B() { if ( this.page_id && this.item_id ) { this.fireDB.database.ref(`/items/${page_id}/${item_id}`).once("value").then(snapshot => { console.log("snapshot:", snapshot.val()); // Console log DOES show this row for some reason, value == null this.Item = snapshot.val(); // This throw an error that Item is now null, so the template fails # This row will never reach ( here, we jump to the `catch` ) console.log(this.CTRL, "[VALID] Item.id:", this.Item.id); }).catch((error) => { console.log(this.CTRL, "[FAILED] Item ID not found error:", error); this.has_errors = true; this.error_image = "Item could not be found"; }) } } ,我需要添加一个[PageComponent] Requesting id: -Uyw0OY [PageComponent] [VALID] Page.id: -Uyw0OY snapshot: null <== Why I'm here ? [ItemComponent] [FAILED] Item ID not found error: TypeError: "_this.Item is null" 吗?

为什么我不能只相信A()

即使功能B()所请求的路径中没有答案/项目,为什么也要进入if ( snapshot.val() !== null )

1 个答案:

答案 0 :(得分:0)

您所看到的完全是预期的。当您尝试登录this.Item.id时,将引发错误,因为this.Item为空(从您先前看到的几行空snapshot.val()中分配)。引用空对象上的属性是一个错误-以下错误消息恰好告诉您:“ _ this.Item为空”。此错误将触发以下捕获,您将在其中进行打印。

删除此日志行,您会发现捕获未触发,因为您删除了错误源:

console.log(this.CTRL, "[VALID] Item.id:", this.Item.id);